Php Solr短语搜索需要匹配部分单词
使用Solr搜索英语和朝鲜语文档,到目前为止,朝鲜语搜索工作正常。还需要扩展英语精确短语以匹配部分单词 我使用的Solr查询:Php Solr短语搜索需要匹配部分单词,php,search,solr,lucene,solr-schema,Php,Search,Solr,Lucene,Solr Schema,使用Solr搜索英语和朝鲜语文档,到目前为止,朝鲜语搜索工作正常。还需要扩展英语精确短语以匹配部分单词 我使用的Solr查询: content: "He go" 他走了,他走了,他进球了,等等 我试过用这些,但没用 content: "He go"* 当前字段模式 <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> <analyzer type="inde
content: "He go"
他走了,他走了,他进球了,等等
我试过用这些,但没用
content: "He go"*
当前字段模式
<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"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.CJKBigramFilterFactory" han="false" hiragana="false" katakana="false" hangul="true" outputUnigrams="true" />
</analyzer>
</fieldType>
因此,我的输入和预期输出如下:输入:他去(带引号)
输出:他走了,他走了,他的目标(应该与有这些词的文档匹配,可以是部分匹配)
我如何实现此功能,非常感谢您的任何建议。如果您想按单词的各个部分进行搜索,您需要应用,例如,N-Gram标记器,
例如
在:“自行车”
输出:“bicy”、“bicy”、“icyc”、“icycl”、“cycle”、“cycle”、“cycle”、“cycle”
在这种情况下,您将能够按word的部分进行搜索。您需要为两个分析器应用NGramTokenizerFactory:
<fieldType name="custome_field_type" class="solr.TextField" positionIncrementGap="100" multiValued="false">
<analyzer type="index">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="10"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="10"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
请从solr管理工具中找到相同的分析
支持短语中的内联通配符。在您的情况下,将inoorder=true
附加到参数将提供您想要的行为
您应该注意以下几个限制:
性能对所使用的唯一术语的数量非常敏感
与模式相关的。例如,搜索“a*”将形成
一个大的或条款(从技术上讲是一个有许多术语的span或span)
索引中以开头的指定字段的术语
单字母“a”。将通配符限制在至少
两个或最好是三个字母作为前缀。允许非常短的时间
前缀可能导致返回许多低质量的文档
请注意,它还支持前导通配符“*a”以及
由此产生的性能影响。应用
索引时间分析中的ReversedWildcardFilterFactory通常是一个很好的方法
想法
这是完美的一个。我不知道这件事。
<fieldType name="custome_field_type" class="solr.TextField" positionIncrementGap="100" multiValued="false">
<analyzer type="index">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="10"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="10"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
<fieldType name="custome_field_type" class="solr.TextField" positionIncrementGap="100" multiValued="false">
<analyzer type="index">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="10"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>