使用django haystack autocomplete和elasticsearch搜索数字/数字?
我使用的是Django Haystack,由Elasticsearch支持,用于自动完成,在字段中搜索数字时遇到问题 例如,我在一个对象类型上有一个名为“name”的字段,其值如下:使用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": {
['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,然后使用标准匹配搜索?任何帮助都将不胜感激
非常感谢 你找到答案了吗?我被困在同一条船上,令人惊讶的是在谷歌上找不到任何东西。