【问题标题】:Solr - KeywordTokenizerFactory - Exact Match for Multiple Words Not WorkingSolr - KeywordTokenizerFactory - 多个单词的精确匹配不起作用
【发布时间】:2016-05-24 23:00:21
【问题描述】:

我在 Solr 中做了如下类型定义:

<fieldType name="text_phrase" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  </analyzer>    
</fieldType>

它应该逐字索引值(没有标记化)。

我将值“紧身牛仔裤”添加到我的索引中。

当我运行以下搜索查询(url 解码以供阅读)时,我得到 no results:

http://myvm:8983/solr/mycore/select?q=*:*&fq=name:("skinny jeans")&wt=json&indent=true&debugQuery=true

您可以看到 URL 正在搜索所有内容 (*:*),过滤器查询的确切值是“紧身牛仔裤”。

然后我将值“jeans”添加到我的索引中,并使用

运行类似的查询
&fq=name:("jeans")

我确实找到了“牛仔裤”元素。


所以它适用于单个单词,但不适用于多个单词。为什么会这样?毕竟,我正在寻找一个确切的值。这让我怀疑 KeywordTokenizerFactory 正在做一些奇怪的事情。谁能告诉我为什么这样的基本设置没有返回任何结果?

谢谢,

【问题讨论】:

    标签: solr tokenize solr5


    【解决方案1】:

    这是因为您使用KeywordTokenizerFactory 进行索引,从而使单词保持原样。不应用任何标记化或不创建任何标记。但是在查询时,您使用的是WhitespaceTokenizerFactory,它会为空格创建标记。

    所以KeywordTokenizerFactory 将有一个类似"skinny jeans" 的标记作为索引中的单个标记。

    WhitespaceTokenizerFactory 将创建类似"skinny", "jeans" 的令牌。

    您可以看到差异,它不会匹配。您正在针对 "skinny jeans" 搜索 "skinny", "jeans"。

    您需要更改索引标记器或查询标记器。

    如果您想继续进行完全匹配,请在索引和查询时将KeywordTokenizerFactory 保留在标记器中,如下所示

    <fieldType name="text_phrase" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
      </analyzer>    
    </fieldType>
    

    您可以使用solr分析工具检查索引时创建的令牌和查询时创建的令牌。

    【讨论】:

    • 啊,我想我明白了,你是说即使在我的查询中我双引号“紧身牛仔裤”这个短语,它实际上不会作为短语来查询,而是作为单独的标记?
    • 如果我在查询端使用 WhitespaceTokenizerFactory 和 ShingleFilterFactory 是否可以获得与我所追求的结果相似的结果?
    • @mils :对此不太确定...但是可以尝试通过构建 fieldType 并将其应用于该字段...最好的方法是在 solr 分析中进行分析页面/工具...
    猜你喜欢
    • 1970-01-01
    • 2019-08-09
    • 2015-04-09
    • 2020-04-21
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    相关资源
    最近更新 更多