我需要在模型字段中搜索子字符串值。我有一个Index和一个SearchQuerySet。
这是Elasticsearch配置。
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
'URL': 'http://127.0.0.1:9200/',
'INDEX_NAME': 'haystack',
},
}
我的索引。
class ElementIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
#model fields
title_element = indexes.EdgeNgramField(model_attr='title')
clean_content = indexes.EdgeNgramField(model_attr='clean_content')
def get_model(self):
return Element
def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return Element.objects.filter(updatetime__lte=datetime.datetime.now())
我的自定义搜索。
SearchQuerySet().filter(title_element=clean_value)
在我的数据库中,我有一个值“HolaMundoTest”,如果我尝试通过'Hola'或'HolaM'进行搜索,我会找到一个结果,但如果我尝试'Mundo'或'mundo'或'laMun',那么无匹配。
有什么不对?我不明白。
来源http://django-haystack.readthedocs.org/en/v2.1.0/autocomplete.html
我正在使用:
感谢您的回答 -
答案 0 :(得分:4)
当您使用EdgeNgramField时,它是预期的行为,因为它在空格上进行标记并匹配以查询中的字符开头的文本。
为了获得查询“laMun”或“mundo”的结果,您应该使用NgramField而不是EdgeNgramField。