Django Haystack中的EdgeNgramField最小和最大字母

有没有一种方法可以限制Django Haystack索引中边缘ngram的大小?例如,我创建ngram如下:

#search_indexes.py

content_auto = indexes.EdgeNgramField(model_attr='name')

但我不想创建2个字母ngram,实际上我想将最小设置为4或5。

作为背景,我使用的是django-haystack / elasticsearch,并在heroku上使用了盆景。

回答:

您需要做的是覆盖Haystack的ElasticSearch后端中的搜索映射。

简而言之:扩展ElasticSearch后端,并直接替换或通过settings.py导入新模式映射进行替换。

from django.conf import settings

from 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后端以自定义搜索映射。

以上是 Django Haystack中的EdgeNgramField最小和最大字母 的全部内容, 来源链接: utcz.com/qa/399759.html

回到顶部