【问题标题】:Phrase Search using Elasticsearch Showing Unrelated Results使用 Elasticsearch 的短语搜索显示不相关的结果
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 嘿,你这么说听起来太明显了! :) 我什至没有想过要查看那里的设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多