【发布时间】:2021-01-13 14:58:12
【问题描述】:
我有一个name 字段,定义如下:
<fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
</analyzer>
</fieldType>
我想根据以下条件搜索内容:
示例值:
test a value
test of solr
not a value
test me says value
所以,如果我搜索test value,我应该只得到包含test 和values 的结果。而且,即使我这样做test a value,我仍然应该得到相同的结果,因为停用词将被排除在外。但是,使用当前的设置,即使在 solr 查询中包含 edismax,我也会得到所有结果。它使用这两个令牌中的任何一个来记录。有人可以建议我对定义进行更新以得到预期的结果吗?而且,我是否按预期使用了停用词?我不希望搜索中的停用词消耗执行时间。
我根据建议更新了定义,即使这样,结果对我来说也没有任何意义。
我有一个值what a term。而且,还有其他值,例如 what the term ; about a term; about the term; description test; Name a Nothing 等。搜索 what a term 会返回所有这些。而且,我也只有a 和the 的值。他们也在结果中返回。虽然,对于what a term,根据下面的屏幕截图,查询省略了停用词,结果对我来说没有任何意义。
【问题讨论】:
-
您可以将索引和查询用作单独的分析器。从查询分析器中删除停止过滤器工厂。
-
请参考下面的字段类型。
-
我已经在评论中发布了更新的定义。我仍然看到相同的行为@AbhijitBashetti
-
你为什么要使用 KeywordTokenizerFactory...?KeywordTokenizerFactory 不会创建文本的标记...它将文本保留为单个标记...在这种情况下,其他过滤器没有用...
标签: search solr stop-words