elasticsearch,django-haystack,digits,Django,Autocomplete,elasticsearch,Django Haystack,Digits" /> elasticsearch,django-haystack,digits,Django,Autocomplete,elasticsearch,Django Haystack,Digits" />

使用django haystack autocomplete和elasticsearch搜索数字/数字?

使用django haystack autocomplete和elasticsearch搜索数字/数字?,django,autocomplete,elasticsearch,django-haystack,digits,Django,Autocomplete,elasticsearch,Django Haystack,Digits,我使用的是Django Haystack,由Elasticsearch支持,用于自动完成,在字段中搜索数字时遇到问题 例如,我在一个对象类型上有一个名为“name”的字段,其值如下: ['NAME', 'NAME2', 'NAME7', 'ANOTHER NAME 8', '7342', 'SOMETHING ELSE', 'LAST ONE 7'] ELASTICSEARCH_INDEX_SETTINGS = { 'settings': { "analysis": {

我使用的是Django Haystack,由Elasticsearch支持,用于自动完成,在字段中搜索数字时遇到问题

例如,我在一个对象类型上有一个名为“name”的字段,其值如下:

['NAME', 'NAME2', 'NAME7', 'ANOTHER NAME 8', '7342', 'SOMETHING ELSE', 'LAST ONE 7']
ELASTICSEARCH_INDEX_SETTINGS = {
    'settings': {
        "analysis": {
            "analyzer": {
                "synonym_analyzer" : {
                    "type": "custom",
                    "tokenizer" : "standard",
                    "filter" : ["synonym"]
                },
                "ngram_analyzer": {
                    "type": "custom",
                    "tokenizer": "lowercase",
                    "filter": ["haystack_ngram", "synonym"]
                },
                "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": 2,
                    "max_gram": 15
                },
                "synonym" : {
                    "type" : "synonym",
                    "ignore_case": "true",
                    "synonyms_path" : "synonyms.txt"
                }
            }
        }
    }
}
我想使用autocomplete搜索名称中带有数字“7”的所有对象

我已使用此字段设置搜索索引:

name_auto = indexes.EdgeNgramField(model_attr='name')
我使用的搜索查询如下:

SearchQuerySet().autocomplete(name_auto='7')
但是,此搜索不会返回任何结果。我相信这是因为elasticsearch的edge ngram标记器默认为“小写”,它完全抛出数字

因此,我发现,它允许定制haystack/elasticsearch后端,但我似乎无法正确配置elasticsearch_INDEX_设置以获得我想要的功能

默认设置如下所示:

['NAME', 'NAME2', 'NAME7', 'ANOTHER NAME 8', '7342', 'SOMETHING ELSE', 'LAST ONE 7']
ELASTICSEARCH_INDEX_SETTINGS = {
    'settings': {
        "analysis": {
            "analyzer": {
                "synonym_analyzer" : {
                    "type": "custom",
                    "tokenizer" : "standard",
                    "filter" : ["synonym"]
                },
                "ngram_analyzer": {
                    "type": "custom",
                    "tokenizer": "lowercase",
                    "filter": ["haystack_ngram", "synonym"]
                },
                "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": 2,
                    "max_gram": 15
                },
                "synonym" : {
                    "type" : "synonym",
                    "ignore_case": "true",
                    "synonyms_path" : "synonyms.txt"
                }
            }
        }
    }
}
我尝试过以多种方式修改edgengram_analyzer块,但没有成功,并添加了类似的内容

"token_chars": [ "letter", "digit" ]
“干草堆”标记器也不起作用

有人能帮我确定如何使用haystack/elasticsearch/autocomplete搜索数字吗?或者我必须自己将“name”字段拆分为所有可能的n-gram,然后使用标准匹配搜索?任何帮助都将不胜感激


非常感谢

你找到答案了吗?我被困在同一条船上,令人惊讶的是在谷歌上找不到任何东西。