【发布时间】:2014-12-15 13:13:35
【问题描述】:
我在 Ubuntu Linux 机器上使用 Elasticsearch 1.4.1 提供对 Django 1.5 站点的搜索,使用 Haystack 2.3.1。我使用 EdgeNGram 字段为文档文本设置了搜索索引,除了在 SearchView 中对 searchqueryset 进行一些过滤之外,我还有一个非常标准的设置(我认为 :))。
我遇到的问题是短语搜索(引用搜索)工作正常,除了某些特定情况,例如:“1G 鸡”(只是虚构,但举例说明了问题) - 看起来要做的就是忽略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 之类的方法,但这似乎没有帮助。
有什么想法吗?
【问题讨论】:
-
您的 EdgeNGram 分析仪使用了哪些设置?
-
这是默认的Haystack edge n-gram设置,所以看后端好像是:tokenizer: lowercase min_gram: 3 max_gram: 15 难道是把1G部分丢掉了?
-
yes :-) min_gram: 3 将忽略小于 3 的所有内容。
标签: elasticsearch django-haystack