2

我正在开发一组同义词,您可以在其中找到一些多词表达,例如:

黑莓 => 黑莓

在分析阶段,使用 /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”取代。

我在这里看到你可以通过修改 FieldQParser 插件来解决这种情况。

无论如何,由于这样的帖子是在将近 3 年前发布的,我想知道 Solr 内部是否有解决这个问题的方法,避免扩展一些插件。

谢谢。

4

2 回答 2

0

在 Solr-6.5.0 中,您可以通过设置以下参数来启用查询时多词同义词

从文档

母猪参数

Split on whitespace:如果设置为 false,将一次性将空格分隔的术语序列提供给文本分析,从而启用对术语序列进行操作的分析过滤器的正确功能,例如多词同义词和 shingles。默认为 true:为每个单独的空格分隔的术语单独调用文本分析。

[同义词.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 中提到的单词。

于 2017-04-02T05:00:51.743 回答
0

基于此链接,您应该搜索带引号的“black berry”,因为不带引号使用它会导致 OR 查询,即 black OR berry

于 2015-12-13T20:33:33.733 回答