您需要做的是覆盖Haystack的ElasticSearch后端中的搜索映射。
简而言之:扩展ElasticSearch后端,并直接替换或通过
settings.py导入新模式映射进行替换。
from django.conf import settingsfrom haystack.backends.elasticsearch_backend import (ElasticsearchSearchBackend, ElasticsearchSearchEngine)class MyElasticBackend(ElasticsearchSearchBackend): def __init__(self, connection_alias, **connection_options): super(ConfigurableElasticBackend, self).__init__( connection_alias, **connection_options) MY_SETTINGS = { 'settings': { "analysis": { "analyzer": { "ngram_analyzer": { "type": "custom", "tokenizer": "lowercase", "filter": ["haystack_ngram"] }, "edgengram_analyzer": { "type": "custom", "tokenizer": "lowercase", "filter": ["haystack_edgengram"] } }, "tokenizer": { "haystack_ngram_tokenizer": { "type": "nGram", "min_gram": 3, "max_gram": 15, }, "haystack_edgengram_tokenizer": { "type": "edgeNGram", "min_gram": 2, "max_gram": 15, "side": "front" } }, "filter": { "haystack_ngram": { "type": "nGram", "min_gram": 3, "max_gram": 15 }, "haystack_edgengram": { "type": "edgeNGram", "min_gram": 5, "max_gram": 15 } } } } } setattr(self, 'DEFAULT_SETTINGS', MY_SETTINGS)class ConfigurableElasticSearchEngine(ElasticsearchSearchEngine): backend = MyElasticBackend有关更完整的说明,请参阅我的文章,有关扩展ElasticSearch后端以自定义搜索映射。



