EdgeNgramField django haystack 中的最小和最大字母

2024-01-10

有没有办法限制 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 后端的文章 http://www.wellfireinteractive.com/blog/custom-haystack-elasticsearch-backend/自定义搜索映射。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EdgeNgramField django haystack 中的最小和最大字母 的相关文章

随机推荐