solrlucenesolrcloud

Solr 9 – Error "No suggester named suggest was configured"


I am new to Solr and am trying to add the Suggest Search Component via the Config API.

My Solr 9.0.0 setup is as follows:

  1. bin/solr start -e cloud with _default config

  2. Index a csv with bin/post -c collection_name file_path/file.csv

  3. Add the search component with a POST request to http://localhost:8983/api/collections/collection_name/config:

{
  "add-searchcomponent": {
    "name": "suggest",
    "class": "solr.SuggestComponent",
    "lookupImpl": "FuzzyLookupFactory",
    "dictionaryImpl": "DocumentDictionaryFactory",
    "field": "name",
    "suggestAnalyzerFieldType": "string",
    "buildOnStartup": false
  }
}
  1. Add the request handler with a POST request to http://localhost:8983/api/collections/collection_name/config:
{
  "add-requesthandler": {
    "name": "/suggest",
    "startup": "lazy",
    "class": "solr.SearchHandler",
    "defaults": {
                    "suggest": true,
                    "suggest.count": 10
                },
    "components": ["suggest"]
  }
}

This works fine and my configoverlay.json looks as follows:

{
  "props":{"updateHandler":{"autoSoftCommit":{"maxTime":3000}}},
  "searchComponent":{"suggest":{
      "name":"suggest",
      "class":"solr.SuggestComponent",
      "lookupImpl":"FuzzyLookupFactory",
      "dictionaryImpl":"DocumentDictionaryFactory",
      "field":"name",
      "suggestAnalyzerFieldType":"string",
      "buildOnStartup":false}},
  "requestHandler":{"/suggest":{
      "name":"/suggest",
      "startup":"lazy",
      "class":"solr.SearchHandler",
      "defaults":{
        "suggest":true,
        "suggest.count":10},
      "components":["suggest"]}}}

But if I send the request http://localhost:8983/solr/collection_name/suggest?suggest.dictionary=suggest&q=J&suggest.build=true I receive the following error:

{
    "responseHeader": {
        "zkConnected": true,
        "status": 400,
        "QTime": 3
    },
    "error": {
        "metadata": [
            "error-class",
            "org.apache.solr.common.SolrException",
            "root-error-class",
            "org.apache.solr.common.SolrException"
        ],
        "msg": "No suggester named suggest was configured",
        "code": 400
    }
}

I could imagine it has something to do with the naming of the search component, as there are two distinct names as defined in the docs. There is a "searchComponent name" and a "name" parameter, but I don't now how to manipulate the "searchComponent name".

I have found this and this post on a similar error, but both posts are about the suggest.dictionary not being configured which is not the case in my situation.

Any help on what I am doing wrong is greatly appreciated.


Solution

  • One SuggestComponent can use multiple dictionaries, so you have to define them in a list and specify a name explicitly for each one.

    Note also that buildOnStartup expects a string.

    {
      "add-searchcomponent": {
        "name": "suggest",
        "class": "solr.SuggestComponent",
        "suggester": [{
          "name": "fuzzy",
          "lookupImpl": "FuzzyLookupFactory",
          "dictionaryImpl": "DocumentDictionaryFactory",
          "field": "name",
          "suggestAnalyzerFieldType": "string",
          "buildOnStartup": "false"
        }]
      }
    }
    

    Which you can query with .../suggest?suggest.dictionary=fuzzy&q=J&suggest.build=true