В настоящее время мы использовали Django Haystack и Solr, но теперь мы хотели переключить наш Backback на ElasticSearch из-за более легкой конфигурации в кластере.Хейстак и 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 и сделать то же самое, но мы Штука, так как мы не можем настроить поле Ngram, как мы могли бы сделать в Solr. Так что он всегда не делал правильных совпадений.
Что это значит. В настоящее время мы индексируем наши идентификаторы моделей, так как каждая модель начинается с идентификатора более 10000, поэтому, когда я перед поиском 10001 я получил бы модель с идентификатором 10001 (даже с NGram) На ElasticSearch я ничего не получил, найти что-нибудь. Как я мог это сделать.
если я правильно понимаю, вы придающие идентификатор в шаблоне поля 'текст'? Вы должны поместить в search_index выделенное поле obj_id, которое не является ngram для точного поиска. –