目前我们使用 Django Haystack 和 Solr,但现在我们想将 Search Backend 切换到 ElasticSearch,因为集群中的配置更容易。
在 Solr 上,我们的文本字段是 nGram,以便进行更模糊的搜索,并且不对单词使用精确匹配。它是这样配置的:
<field name="text" type="ngram" indexed="true" stored="true" multiValued="false" />
<fieldType name="ngram" class="solr.TextField" >
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
现在我们尝试使用 ElasticSearch 并做同样的事情,但我们卡住了,因为我们无法像在 Solr 中那样配置 Ngram 字段。所以它总是没有做出正确的匹配。
那是什么意思。我们目前索引我们的模型 ID,因为每个模型都以大于 10000 的 ID 开头,所以当我在搜索 10001 之前,我会得到 ID 为 10001 的模型(即使使用 NGram)在 ElasticSearch 上我什么也没得到,只是找不到任何事物。我怎么能这样。