【问题标题】:Solr: Multi-word synonymsSolr:多词同义词
【发布时间】:2012-07-18 14:52:26
【问题描述】:

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

黑莓 => 黑莓

在分析阶段,使用 /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 内部是否有解决这个问题的方法,避免扩展一些插件。

谢谢。

【问题讨论】:

    标签: solr synonym


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      来自文档

      sow 参数

      空格分割:如果设置为false, 空格分隔的术语序列将提供给文本分析 一口气,启用运行的分析过滤器的正确功能 长期序列,例如多词同义词和带状疱疹。默认值 为真:为每个人单独调用文本分析 空格分隔的术语。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-26
        • 2023-04-04
        • 2023-03-27
        • 1970-01-01
        相关资源
        最近更新 更多