gpt4 book ai didi

java - Solr 我怎样才能先拥有原始术语而不是词干版本?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:18 25 4
gpt4 key购买 nike

我一直试图在 Solr 5.0.0 结果中首先得到精确的键匹配结果。

例如,

  • 冥想碗
  • 女神碗
  • 天体碗
  • 鲍灵格林
  • 33碗西藏颂钵
  • 沙尘暴复兴
  • 星星碗

如果我搜索单词 bowl,预期的结果是:

  1. 沙尘暴复兴
  2. 星星碗
  3. 冥想碗
  4. 女神碗
  5. 天体碗
  6. 鲍灵格林
  7. 33碗西藏颂钵

包含结果的确切单词应该排在第一位。我的模式如下:

 <fieldType name="text_wslc" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="1"
catenateAll="1"
preserveOriginal="1"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordRepeatFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.KStemFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="1"
catenateAll="1"
preserveOriginal="1"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordRepeatFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.KStemFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>

我曾看到使用 KeywordRepeatFilterFactory 给出了完全匹配的版本。但这对我不起作用。

最佳答案

您可以在 schema.xml 中添加另一个字段。这一个将包含您的原始字段的副本:

<field name="title" type="text_wslc" indexed="true" stored="true"/>
<field name="titleExact" type="text_wslcExact" indexed="true" stored="true"/>
<copyField source="title" dest="titleExact"/>

text_wslcExact 是这样的:

<fieldType name="textExact" class="solr.TextField" positionIncrementGap="100" >
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="20"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="20"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>

接下来要做的是将这个新字段添加(并提升)到您的查询中。因此,在您的 solrconfig.xml 中,尝试执行类似的操作:

<str name="qf">title titleExact^10</str>
<str name="pf">title^10 titleExact^100</str>

Here is my source在那里你可以得到所有的解释。

关于java - Solr 我怎样才能先拥有原始术语而不是词干版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31112957/

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