Solr Suggestor 的 DSE CQL 查询
DSE CQL Query for Solr Suggestor
我使用的是DSE 5.0.1 版本。之前我们使用分面查询来显示搜索建议。出于性能原因,寻找其他替代方案来获得建议并找到了 solr 搜索建议器组件。但是我找不到从 CQL 查询中使用 suggester 组件的示例。可能吧?谁能帮我解决这个问题。
提前致谢。
是的,这是可能的并且相对容易 - 您只需要了解如何将要放入生成的 solrconfig.xml
中的 XML 映射到用于配置的 JSON 中。
例如,我们要配置建议器以建议来自字段 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 来控制它。或者您可以将其配置为在启动时构建建议索引等。 - 请参阅 Solr 的文档。
完整示例是 here - 这是电子商务应用程序的示例。
我使用的是DSE 5.0.1 版本。之前我们使用分面查询来显示搜索建议。出于性能原因,寻找其他替代方案来获得建议并找到了 solr 搜索建议器组件。但是我找不到从 CQL 查询中使用 suggester 组件的示例。可能吧?谁能帮我解决这个问题。 提前致谢。
是的,这是可能的并且相对容易 - 您只需要了解如何将要放入生成的 solrconfig.xml
中的 XML 映射到用于配置的 JSON 中。
例如,我们要配置建议器以建议来自字段 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 来控制它。或者您可以将其配置为在启动时构建建议索引等。 - 请参阅 Solr 的文档。
完整示例是 here - 这是电子商务应用程序的示例。