使用Elasticsearch显示不相关结果的词组搜索

时间:2014-12-15 13:13:36

标签: elasticsearch django-haystack

我在Ubuntu Linux机器上使用Elasticsearch 1.4.1,使用Haystack 2.3.1搜索Django 1.5站点。我使用EdgeNGram字段为文档文本设置了搜索索引,除了在SearchView中搜索searchqueryset之外,我有一个非常标准的设置(我认为:))。

我遇到的问题是,短语搜索(引用搜索)工作正常,除了某些特定情况,例如:“1G chicken”(刚刚组成,但举例说明了问题) - 看起来似乎要做的就是忽略1G并简单地将其变成对“鸡”的搜索。这是预期的吗?有没有办法强制弹性搜索来表达这句话?

以下是慢速日志中的查询本身:

[2014-12-09 17:09:19,373][WARN ][index.search.slowlog.fetch] [Advisor] [haystack][4] took[3.3ms], took_millis[3], types[modelresult], stats[], search_type[QUERY_THEN_FETCH], total_shards[5], source[{"query":{"filtered":{"filter":{"terms":{"django_ct":["objectives.objective","actions.action","attachments.file","projects.project","toolkits.toolkit"]}},"query":{"query_string":{"auto_generate_phrase_queries":true,"default_operator":"AND","analyze_wildcard":true,"query":"(organization_id:(\"2\" OR \"3\" OR \"6\" OR \"40\" OR \"170\" OR \"171\" OR \"172\" OR \"173\" OR \"174\") AND (\"1G Chicken\"))","default_field":"text"}}}},"from":0,"size":15}], extra_source[],

“organization_id”与我最初提到的SearchView中的SQS过滤有关。

另请注意,我已经尝试过将手动模糊设置为0,但这似乎没什么帮助。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

min_gram只能存储三个或更多字符的标记 - “1G”将被忽略。

您可以将min_gram减小到更小的长度或切换到另一个分析器。