为什么Haystack会返回非阻塞结果?

时间:2012-07-21 01:28:55

标签: python django search elasticsearch django-haystack

我使用Haystack和ElasticSearch作为后端,在我的Django应用程序中实现搜索。我不明白它是如何处理干扰的。我的索引模型在其文本中有“嵌入”一词。搜索“嵌入”会产生正确的结果。搜索“嵌入”不会产生任何效果。

我正在以最简单的方式查询文档:

SearchQuerySet().filter(content='embed')

我挖掘了代码,发现ElasticSearch遭到了以下攻击:

import requests
url = 'http://127.0.0.1:9200/haystack/modelresult/_search?from=0&size=20'
kwargs = {"data": '{"query": {"filtered": {"filter": {"fquery": {"query": {"query_string": {"query": "django_ct:(component_catalog.component)"}}, "_cache": true}}, "query": {"query_string": {"query": "(embed)", "default_operator": "AND", "default_field": "text", "auto_generate_phrase_queries": true, "analyze_wildcard": true}}}}}', "timeout": 10}
requests.get(url, **kwargs)

问题:

为什么Haystack不会返回结果?

(embed)是什么意思?

1 个答案:

答案 0 :(得分:1)

query_string使用Lucene's query syntax,因此(embed)表示围绕'embed'的逻辑分组。从Lucene文档中,这是一个例子:

(jakarta OR apache) AND website

根据您的情况,您可以忽略它。这可能是Haystack自动插入的东西。

我的第一个倾向是说您的映射不正确。你是如何分析和索引你的领域的?你使用过Snowball阻尼器吗?

您可以使用curl来测试各种分析仪的响应方式,当您没有获得所需的结果时,这是一个方便的技巧:

curl -X GET "http://localhost:9200/test/_analyze?analyzer=snowball&pretty=true" -d "embedded"
{
   "tokens" : [ {
      "token" : "embed",
      "start_offset" : 0,
      "end_offset" : 8,
      "type" : "<ALPHANUM>",
      "position" : 1
    } ]
}