我的关键字不能按预期工作。 这是我的架构的一部分:
<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:&#34; deal_description:他是m &#34; - 我希望这份文件带有deal_description&#34;这是我的描述&#34;将被退回
示例2:&#34; deal_description:是&#34; - 我希望找不到任何东西,因为&#34;是&#34; &#34;&#34;&#34;是停用词。
当我尝试搜索deal_title_terms时:
示例1:&#34; deal_title_terms:是&#34; - 我希望找不到任何东西,因为&#34;是&#34;是禁止词
示例2:&#34; deal_title_terms:是交易&#34; - 我希望&#34;是&#34; &#34;&#34;&#34;将被忽略并且术语&#34;交易&#34;将被找到。
示例3:&#34; deal_title_terms:标题条款&#34; - 我希望&#34; a&#34;将被忽略和术语&#34;标题术语&#34;将被发现。
问题1:为什么停用词不适用于&#34; deal_description&#34;领域?
问题2:为什么要使用字段&#34; deal_title_terms&#34;我的查询未删除停用词?(当我试图找到标题时,它将找不到&#34;标题术语&#34;术语)
问题3:有没有办法在搜索结果中显示停用词但阻止他们搜索?例如:
数据:这是很酷的搜索引擎
搜索查询:&#34; 是咕咕&#34; - &GT;返回&#34;这是很酷的搜索引擎&#34;
搜索查询:&#34; 是&#34; - &GT;什么都不回报
搜索查询:&#34; 此coll &#34; - &GT;返回&#34;这是很酷的搜索引擎&#34;
问题4:我可以在哪里找到详细描述(可能包含示例),如何在solr中使用停用词?因为它看起来很神奇。
答案 0 :(得分:1)
回答问题1:替换&#34; KeywordTokenizerFactory&#34;因为它没有实际的标记,所以整个输入字符串被保存为单个标记。而是使用StandardTokenizerFactory。
或使用以下fieldType。
<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>
停用词将按预期的方式运行&#34; deal_description&#34;字段。
回答问题3:是的。在类型=&#34;查询&#34;的分析器中添加StopFilterFactory只要。它会阻止他们搜索,也不会在编制索引时添加它们。
回答问号4:https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
对Quesion 2的回答:您创建的自定义字段似乎不正确。首先必须使用标记器对文本进行标记,但首先使用过滤器。 使用solr分析页检查它的分析。