2 回答
TA贡献1752条经验 获得超4个赞
如果你想按词的部分搜索,你需要申请,例如,N-Gram Tokenizer, <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="10"/>
例如。
在: "bicycle"
出去: "bicy", "bicyc", "icyc", "icycl", "cycl", "cycle", "ycle"
在这种情况下,您将能够按单词部分进行搜索。您需要为两个分析器应用 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>
如果您使用上述字段类型,那么在管理工具上的相同分析如下。
您还可以尝试以下查询分析器。这一切都取决于您的要求。
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
您可以修改或添加字段类型schema.xml并将其应用于您的字段。完成后重新启动服务器,重新索引数据。如果数据匹配,您可以使用 solr 管理工具验证您的字段的上述 fieldType。
我使用了以下字段类型并使用 solr 工具进行了分析。
这是字段类型:
<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>
请从 solr 管理工具中找到相同的分析。
TA贡献1803条经验 获得超3个赞
在复杂的短语查询分析器支持词组内嵌通配符。在您的情况下,附加inOrder=true
到参数将为您提供所需的行为。
您应该注意一些限制:
性能对与模式关联的唯一术语的数量很敏感。例如,搜索“a*”将为索引中以单个字母“a”开头的指示字段的所有术语形成一个大的 OR 子句(技术上是一个包含许多术语的 SpanOr)。将通配符限制为至少两个或最好三个字母作为前缀可能是谨慎的。允许非常短的前缀可能会导致返回许多低质量的文档。
请注意,它还支持前导通配符“*a”以及随之而来的性能影响。在索引时间分析中应用 ReversedWildcardFilterFactory 通常是一个好主意。
- 2 回答
- 0 关注
- 294 浏览
添加回答
举报