【发布时间】:2015-03-12 11:37:09
【问题描述】:
我创建了一个带有字段title_auto的索引:
class GameIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, model_attr='title')
title = indexes.CharField(model_attr='title')
title_auto = indexes.NgramField(model_attr='title')
弹性搜索设置如下所示:
ELASTICSEARCH_INDEX_SETTINGS = {
'settings': {
"analysis": {
"analyzer": {
"ngram_analyzer": {
"type": "custom",
"tokenizer": "lowercase",
"filter": ["haystack_ngram"],
"token_chars": ["letter", "digit"]
},
"edgengram_analyzer": {
"type": "custom",
"tokenizer": "lowercase",
"filter": ["haystack_edgengram"]
}
},
"tokenizer": {
"haystack_ngram_tokenizer": {
"type": "nGram",
"min_gram": 1,
"max_gram": 15,
},
"haystack_edgengram_tokenizer": {
"type": "edgeNGram",
"min_gram": 1,
"max_gram": 15,
"side": "front"
}
},
"filter": {
"haystack_ngram": {
"type": "nGram",
"min_gram": 1,
"max_gram": 15
},
"haystack_edgengram": {
"type": "edgeNGram",
"min_gram": 1,
"max_gram": 15
}
}
}
}
}
我尝试进行自动完成搜索,它有效,但是返回了太多不相关的结果:
qs = SearchQuerySet().models(Game).autocomplete(title_auto=search_phrase)
或
qs = SearchQuerySet().models(Game).filter(title_auto=search_phrase)
它们都产生相同的输出。
如果 search_phrase 是“垄断”,则第一个结果的标题中包含“垄断”,但是,由于只有 2 个相关项目,因此返回 51。其他与“垄断”完全无关。
所以我的问题是 - 如何更改结果的相关性?
【问题讨论】:
标签: django autocomplete elasticsearch django-haystack