gpt4 book ai didi

Solr WordDelimiterFilter 生成单词部分并在查询中连接

转载 作者:行者123 更新时间:2023-12-04 23:22:45 24 4
gpt4 key购买 nike

我想查询 wi-fi 以将文档与索引中的 wifi 相匹配。所以,我使用 solr.WordDelimiterFilterFactory 来连接查询中的单词:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1" splitOnNumerics="1" stemEnglishPossessive="0" preserveOriginal="0"/>
<filter class="solr.ICUFoldingFilterFactory"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1" splitOnNumerics="1" stemEnglishPossessive="0" preserveOriginal="0"/>
<filter class="solr.ICUFoldingFilterFactory"/>
</analyzer>
</fieldType>

但是使用这个配置查询LGA1155并不匹配LGA 1155,因为查询title:LGA1155被解析为:(title:lga title:1155 title:lga1155)~3

如果我不连接查询中的单词,LGA1155 匹配 LGA 1155,因为查询被解析为:(title:lga title:1155)~2。但是 Wi-Fi 与 wifi 不匹配。

我正在使用 edismax 查询解析器,而 q.op 是 AND。 Solr 版本:4.5。

那么,如何让 wi-fi 匹配 wifi 和 LGA1155 匹配 LGA 1155(和其他类似的查询)?

最佳答案

正如您所描述的,您想将单词部分连接起来,但又想在数字上进行拆分。
catenateAll="1"你在那里不好,因为它会撤销你想要实现的数字分割(LGA115 变成 LGA 1155)。

尝试使用 WhitespaceTokenizerFactory 的这些设置在您的分析仪中。

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="0" catenateWords="1"
generateNumberParts="1" catenateNumbers="0" splitOnNumerics="1"
catenateAll="0" splitOnCaseChange="0"
stemEnglishPossessive="0" preserveOriginal="0" />
<filter class="solr.ICUFoldingFilterFactory" />
</analyzer>
</fieldType>

这将产生以下 token
  • 无线网络 -> wifi
  • Wi-Fi -> wifi
  • WiFi -> wifi
  • LGA1155 -> lga 1155
  • LGA 1155 -> lga 1155
  • LGA-1155 -> lga 1155

  • 如您所见,wifi 成为一个词,LGA1155 分离。

    另一件事是,正如您在我的示例中看到的,如果查询和索引时间的分析器应与您的示例中相同,则可以省略 type analyzer 中的属性元素并完全删除两个元素之一。

    所以代替

    <fieldType ... >
    <analyzer type="query">
    <!-- same stuff -->
    </analyzer>
    <analyzer type="index">
    <!-- same stuff -->
    </analyzer>
    </fieldType>

    只是

    <fieldType ... >
    <analyzer>
    <!-- will be taken to index and query time -->
    </analyzer>
    </fieldType>

    关于Solr WordDelimiterFilter 生成单词部分并在查询中连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19709304/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com