Solr建议人的DSE CQL查询

vc6uscn9  于 2022-11-05  发布在  Solr
关注(0)|答案(1)|浏览(169)

我使用的是DSE 5.0.1版本。之前我们使用facet query来显示搜索建议。出于性能原因,我在寻找其他替代方法来获取建议,并找到了solr search sugester组件。但我找不到从CQL查询中使用sugester组件的示例。这是可能的,对吗?有人能帮助我吗?提前感谢。

egdjgwm8

egdjgwm81#

是的,这是可能的,而且相对容易--您只需要了解如何将要放入生成的solrconfig.xml中的XMLMap到用于配置的JSON中。
例如,我们希望配置sugestor对title字段中的数据提供建议,并使用rating字段中的附加权重。根据Solr documentation,XML片段应如下所示:

<searchComponent class="solr.SuggestComponent" name="suggest">
    <lst name="suggester">
      <str name="name">titleSuggester</str>
      <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
      <str name="dictionaryImpl">DocumentDictionaryFactory</str>
      <str name="suggestAnalyzerFieldType">TextField</str>
      <str name="field">title</str>
      <str name="weightField">rating</str>
      <str name="buildOnCommit">false</str>
      <str name="exactMatchFirst">true</str>
      <str name="contextField">country</str>
    </lst>
  </searchComponent>
  <requestHandler class="solr.SearchHandler" name="/suggest">
    <arr name="components">
      <str>suggest</str>
    </arr>
    <lst name="defaults">
      <str name="suggest">true</str>
      <str name="suggest.count">10</str>
    </lst>
  </requestHandler>

在CQL中,它将被转换为

ALTER SEARCH INDEX CONFIG ON table ADD 
  searchComponent[@name='suggest',@class='solr.SuggestComponent'] 
  WITH  $$ {"suggester":[{"name":"titleSuggester"}, 
   {"lookupImpl":"AnalyzingInfixLookupFactory"}, 
   {"dictionaryImpl":"DocumentDictionaryFactory"},
   {"suggestAnalyzerFieldType":"TextField"}, 
   {"field":"title"}, {"weightField":"rating"}, 
   {"buildOnCommit":"false"}, {"exactMatchFirst":"true"},
   {"contextField":"country"}]} $$;

ALTER SEARCH INDEX CONFIG ON table ADD 
  requestHandler[@name='/suggest',@class='solr.SearchHandler'] 
  WITH  $$ {"defaults":[{"suggest":"true"}, 
    {"suggest.count":"10"}],"components":["suggest"]} $$;

在此之后,您不必忘记执行:

RELOAD SEARCH INDEX ON table;

在我的例子中,建议器的索引应该显式构建,因为库存不会经常变化,这是通过HTTP调用完成的,如下所示:

curl 'http://localhost:8983/solr/keyspace.table/suggest?suggest=true&suggest.dictionary=titleSuggester&suggest.q=Wat&suggest.cfq=US&wt=json&suggest.build=true&suggest.reload=true'

但是你可以通过将buildOnCommit设置为true来控制它,或者你可以配置它在启动时建立suggestor索引,等等--参见Solr的文档。
完整的示例在这里-这是一个电子商务应用程序的示例。

相关问题