I want to implement a Solr Suggester (http://wiki.apache.org/solr/Suggester)
that ranks suggestions by document boost factor.

As I understand the documentation, the following config should work:

Solrconfig.xml:

...
<requestHandler name="/suggest" class="solr.SearchHandler">
        <lst name="defaults">
            <str name="spellcheck">true</str>
            <str name="spellcheck.count">7</str>
            <str name="spellcheck.onlyMorePopular">true</str>
        </lst>
        <arr name="last-components">
            <str>suggest</str>
        </arr>
    </requestHandler>

<searchComponent class="solr.SpellCheckComponent" name="suggest">
        <lst name="spellchecker">
            <str name="name">default</str>
            <str name="field">suggesttext</str>
            <str
name="classname">org.apache.solr.spelling.suggest.Suggester</str>
            <str
name="lookupImpl">org.apache.solr.spelling.suggest.fst.WFSTLookupFactory</str>
            <str name="buildOnCommit">true</str>
        </lst>
    </searchComponent>
...

Schema.xml:

...
<field name="suggesttext" type="text" indexed="true"  stored="true"
 multiValued="true"/>
...
<fieldType name="text" class="solr.TextField" omitNorms="false"/>
...

I added three documents with a document boost:

{

"add": {
  "commitWithin": 5000,
  "overwrite": true,
  "boost": 3.0,
  "doc": {
    "id": "1",
    "suggesttext": "text bb"
  }
},
"add": {
  "commitWithin": 5000,
  "overwrite": true,
  "boost": 2.0,
  "doc": {
    "id": "2",
    "suggesttext": "text cc"
  }
},
"add": {
  "commitWithin": 5000,
  "overwrite": true,
  "boost": 1.0,
  "doc": {
    "id": "3",
    "suggesttext": "text aa"
  }
}

}

A query the suggest handler (with spellcheck.q=te) gives the following
response:

{
  "responseHeader":{
    "status":0,
    "QTime":6},
  "command":"build",
  "response":{"numFound":3,"start":0,"docs":[
      {
        "id":"1",
        "suggesttext":["text bb"]},
      {
        "id":"2",
        "suggesttext":["text cc"]},
      {
        "id":"3",
        "suggesttext":["text aa"]}]
  },
  "spellcheck":{
    "suggestions":[
      "te",{
        "numFound":3,
        "startOffset":0,
        "endOffset":2,
        "suggestion":["text aa",
          "text bb",
          "text cc"]}]}}

The search results are ranked by boost as expected. However, the
suggestions are not ranked by boost (but alphabetically instead). I also
tried the TSTLookup and FSTLookup lookup implementations with the same
result.

Any ideas what I'm missing?

Thanks,
Mirko

Reply via email to