gpt4 book ai didi

java - Solr:结合 EdgeNGramFilterFactory 和 NGramFilterFactory

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:00:11 27 4
gpt4 key购买 nike

我有一种情况需要同时使用 EdgeNGramFilterFactory 和 NGramFilterFactory。

我正在使用 NGramFilterFactory 执行“包含”样式的搜索,最小字符数为 2。我还想搜索第一个字母,例如前面带有 EdgeNGramFilterFactory 的“startswith”。

我不想将 NGramFilterFactory 降低到 1 的最小字符,因为我不想索引所有字符。

一些帮助将不胜感激

干杯

最佳答案

您不必在同一领域中完成所有这些工作。我会为每种处理使用不同的自定义类型创建不同的字段,以便您可以单独应用逻辑。

在以下内容中:

  • text 包含经过最少处理的原始标记;
  • text_ngram 将 NGramFilter 用于您的最少两个字符的标记
  • text_first_letter 使用 EdgeNGram 作为您的单字符首字母标记

如果您以这种方式处理所有 text 字段,那么您可以使用 copyField 来填充字段。否则,您可以指示您的 Solr 客户端为三种不同的字段类型发送相同的字段值。

搜索时,使用 qf 参数将所有这些都包括在您的搜索中。

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

<fieldType name="text_ngram" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
</fieldType>

<fieldType name="text_first_letter" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="1" side="front"/>
</analyzer>
</fieldType>

设置 fielddynamicField 定义由您决定。或者,如果您有更多问题,请告诉我,我可以进行澄清编辑。

关于java - Solr:结合 EdgeNGramFilterFactory 和 NGramFilterFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7239119/

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