我正在开发一组同义词,您可以在其中找到一些多词表达式,例如:
黑莓=>黑莓
在分析阶段,使用/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 {synonyms = lang / synonyms_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内部问题的方法,避免扩展一些插件。
感谢。
答案 0 :(得分:0)
基于此link,您应该搜索带有引号的“黑莓”,因为使用它而不引用会导致OR查询,即黑色OR浆果
答案 1 :(得分:0)
在Solr-6.5.0中,您可以通过设置以下参数
来启用查询时多项同义词来自文档
母猪参数
在空格上拆分:如果设置为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>
现在您可以从调试响应中看到我搜索了 black berry ,但同义词过滤器工厂映射到我在synonym.txt中提到的单词。