我正在开发一组同义词,您可以在其中找到一些多词表达式,例如:
黑莓=>黑莓
在分析阶段,使用/admin/analysis.jsp工具,我可以看到结果是正确的。
诸如"quiero una black berry“之类的查询返回以下序列:
org.apache.solr.analysis.StandardTokenizerFactory {luceneMatchVersion=LUCENE_36}:
position 1 2 3 4
term text quiero una black berry
startOffset 0 7 11 17
endOffset 6 10 16 22
type <ALPHANUM> <ALPHANUM> <ALPHANUM> <ALPHANUM>同义词{ org.apache.solr.analysis.SynonymFilterFactory =lang/同义词_es.txt,expand=false,ignoreCase=true,luceneMatchVersion=LUCENE_36}:
position 1 2 3
term text quiero una blackberry
type <ALPHANUM> <ALPHANUM> SYNONYM
startOffset 0 7 11
endOffset 6 10 22然而,如果我在一个“真正的”查询中尝试这句话,请求处理程序( edismax处理程序的演变),标记"black“和"berry”并没有被"blackberry“取代。
我已经看到here可以通过修改FieldQParser插件来解决这种情况。
不管怎样,既然这样的帖子是在3年前写的,我想知道在Solr中是否有解决这个问题的方法,而不必扩展一些插件。
谢谢。
发布于 2015-12-14 04:33:34
基于此link,您应该搜索带引号的"black berry“,因为使用它不带引号会导致OR查询,即black OR berry
发布于 2017-04-02 13:00:52
在Solr-6.5.0中,您可以通过设置以下参数来启用查询时多项同义词
来自文档
sow参数
拆分空格:如果设置为false,则空格分隔的术语序列将一次性提供给文本分析,从而启用对术语序列进行操作的分析过滤器的正确功能,例如多个单词的同义词和带状疱疹。缺省值为true:为每个单独的空格分隔的术语单独调用文本分析。
synonym.txt
black berry => blackberry示例
q=black berry
&sow=false
&debug=query调试-响应
<lst name="debug">
<str name="rawquerystring">black berry</str>
<str name="querystring">black berry</str>
<str name="parsedquery">_text_:blackberry</str>
<str name="parsedquery_toString">_text_:blackberry</str>
<str name="QParser">LuceneQParser</str>
</lst>现在您可以从调试响应中看到,我已经搜索了黑莓,但是同义词过滤器工厂映射到了我在synonym.txt中提到的单词。
https://stackoverflow.com/questions/11544216
复制相似问题