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 關注
- 327 瀏覽
添加回答
舉報