gpt4 book ai didi

search - Solr 停用词魔法

转载 作者:行者123 更新时间:2023-12-04 02:21:06 24 4
gpt4 key购买 nike

我的停用词没有按预期工作。这是我的架构的一部分:

<fieldType name="text_general" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

<fieldType class="solr.TextField" name="text_auto">
<analyzer type="index">
<charFilter class="solr.HTMLStripCharFilterFactory"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="true" outputUnigramsIfNoShingles="false"/>
</analyzer>
<analyzer type="query">
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false"/>
</analyzer>
</fieldType>

<field name="deal_title_terms" type="text_auto" indexed="true" stored="false" required="false" multiValued="true"/>

<field name="deal_description" type="text_general" indexed="true" stored="true" required="false" multiValued="false"/>

在 stopwords.txt 中我有下一个词:the, is, a;
我的字段中还有下一个数据:

deal_description - 这是我的描述
deal_title_terms - 这是一个条款的交易标题(将按条款拆分)

当我尝试搜索 deal_description 时:
示例 1:“deal_description:his is the m”- 我希望返回包含 deal_description“This is the my description”的文档
示例 2:“deal_description: is th”- 我预计不会找到任何内容,因为“is”和“the”是停用词。

当我尝试搜索 deal_title_terms 时:
示例 1:“deal_title_terms: is”- 我预计不会找到任何内容,因为“is”是停用词。
示例 2:“deal_title_terms: is the deal”- 我希望“is”和“the”将被忽略,并找到术语“deal”。
示例 3:“deal_title_terms: title a terms”- 我预计“a”将被忽略,并且会找到术语“title terms”。

问题 1:为什么停用词对“deal_description”字段不起作用?
问题 2:为什么没有为我的查询删除字段“deal_title_terms”停用词?(当我尝试查找title a terms时,它不会找到“title terms”术语)
问题 3:有没有办法在搜索结果中显示停用词但阻止它们搜索?示例:

数据:这是很酷的搜索引擎
搜索查询:“is coo”-> 返回“This is cool search engine”
搜索查询:“”-> 什么都不返回
搜索查询:“This coll”-> 返回“This is cool search engine”

问题 4:我在哪里可以找到停用词在 solr 中如何工作的详细说明(可能有示例)?因为它看起来像魔术。

最佳答案

问题 1 的答案:替换“KeywordTokenizerFactory”,因为它没有实际标记化,因此整个输入字符串保留为单个标记。改用 StandardTokenizerFactory。

或者使用下面的字段类型。

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

停用词将按预期用于“deal_description”字段。

问题 3 的答案:是的。仅在 type="query"的分析器中添加 StopFilterFactory。这将阻止他们在索引时搜索而不是添加它们。

问题 4 的答案:https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters

问题 2 的答案:您创建的自定义字段似乎不正确。文本必须首先使用分词器进行分词,但您首先使用过滤器。用solr分析页面查看对它的分析。

关于search - Solr 停用词魔法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29379159/

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