我在设置haystack / django / elasticsearch
时遇到两个问题我从未从索引字段中获得结果,例如indices.CharField(model_attr =' title')并没有得到我的结果。只有当我在我的txt模板中放入{{object.title}}时,我才能获得匹配标题的结果
如果我的头衔是'foo'我从来没有得到结果,而我在后端设置中将INCLUDE_SPELLING设置设置为True。
文档没有说明这些案例的任何特殊内容,我的设置是根据haystack文档,我缺少什么?
我的索引:
class FooIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
title = indexes.CharField(model_attr='title') # never gets me results unless I add it to the template
def get_model(self):
return Foo
我的设置:
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
'URL': 'http://127.0.0.1:9200/',
'INDEX_NAME': 'haystack',
'INCLUDE_SPELLING': True,
},
}
答案 0 :(得分:0)
1)如果您use_template=True
仅将您放在template
文件中的内容编入索引,那么请将您想要编入索引的所有字段放在那里。
2)添加INCLUDE_SPELLING
后是否刷新了索引?
答案 1 :(得分:0)
确保您启用了拼写检查组件。
要做的第一件事是在SearchIndex类上创建一个镜像文本字段的特殊字段,但使用FacetCharField。这会禁用Solr执行的后处理,这可能会弄乱您的建议。建议如下:
class MySearchIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
# ... normal fields then...
suggestions = indexes.FacetCharField()
def prepare(self, obj):
prepared_data = super(MySearchIndex, self).prepare(obj)
prepared_data['suggestions'] = prepared_data['text']
return prepared_data
完成此操作后,spelling_suggestions方法应返回相应的值。