2014-10-01 54 views
0

我有两个问题,建立草堆/ Django的/ elasticsearch草堆Django的Elasticsearch拼写

  1. 我从来没有从索引字段,如结果indexes.CharField(model_attr ='title')没有得到我的结果。只有当我将{{object.title}}放入我的txt模板中时,才会得到匹配标题的结果

  2. 如果我的标题是'foo',我从来没有得到'fo'的结果,而我确实设置了INCLUDE_SPELLING设置在我的后端设置为True。

该文档没有说明关于这些情况的任何特殊情况,我的设置是根据干草堆文档,我错过了什么?

我的指数:

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

1)如果你有use_template=True只有你放什么template文件,以便把所有你想在那里建立索引的字段索引。 2)您是否在添加INCLUDE_SPELLING后刷新了索引?

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方法应返回相应的值。