2014-09-28 53 views
1

所以基本上我试图分析仪添加到我的草堆后端Elasticsearch和到目前为止,我还没有运气。Django的草堆+ ElasticSearch仪

我想查询像这样3/09.0TBOBR.C1,我也得到很多的错误。有人告诉我分析是解决我的问题,所以我尝试使用keyword分析

我想是这样的:

class ConfigurableElasticBackend(ElasticsearchSearchBackend): 

    DEFAULT_ANALYZER = "keyword" 

,我也试过这样在我的设置文件:

ELASTICSEARCH_DEFAULT_ANALYZER = "keyword" 

我做了重建索引更改后

我的错误消息是:

Failed to query Elasticsearch using '(3/09.0TBOBR.C1)': 
Non-OK response returned (400): 
    u'SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; 
shardFailures {[oh93DYn1QTyVWmAnDMyKdQ][haystack][4]: 
    SearchParseException[[haystack][4]: from[-1],size[-1]: 
    Parse Failure [Failed to parse source [{ 
     "sort": [{ 
      "score": {"order": "asc", "ignore_unmapped": true, "missing": "_last"} 
     }], 
     "query": {"filtered": {"filter": {"fquery": {"query": {"query_string": {"query": "django_ct:(caselaw.process)"}}, "_cache": true}}, "query": {"query_string": {"query": "(3/09.0TBOBR.C1)", "default_operator": "AND", "default_field": "text", "auto_generate_phrase_queries": true, "analyze_wildcard": true}}} 
     }, "from": 0, "size": 20}]]]; 

nested: 
QueryParsingException[[haystack] 
    Failed to parse query [(3/09.0TBOBR.C1)]]; 
    nested: 
    ParseException[Cannot parse \'(3/09.0TBOBR.C1)\': 
     Lexical error at line 1, column 17. 
     Encountered: <EOF> after : "/09.0TBOBR.C1)"]; 
    nested: 
    TokenMgrError[Lexical error at line 1, column 17. 
     Encountered: <EOF> after : "/09.0TBOBR.C1)"]; }{[oh93DYn1QTyVWmAnDMyKdQ][haystack][0]: 
     SearchParseException[[haystack][0]: from[-1],size[-1]: 
     Parse Failure [Failed to parse source [{"sort": [{"score": {"order": "asc", "ignore_unmapped": true, "missing": "_last"}}], "query": {"filtered": {"filter": {"fquery": {"query": {"query_string": {"query": "django_ct:(caselaw.process)"}}, "_cache": true}}, "query": {"query_string": {"query": "(3/09.0TBOBR.C1)", "default_operator": "AND", "default_field": "text", "auto_generate_phrase_queries": true, "analyze_wildcard": true}}}}, "from": 0, "size": 20}]]]; 
    nested: 
    QueryParsingException[[haystack] Failed to parse query [(3/09.0TBOBR.C1)]]; 
    nested: 
    ParseException[Cannot parse \'(3/09.0TBOBR.C1)\': 
     Lexical error at line 1, column 17. Encountered: <EOF> after : "/09.0TBOBR.C1)"]; 
    nested: 
    TokenMgrError[Lexical error at line 1, column 17. Encountered: <EOF> after : "/09.0TBOBR.C1)"]; }{[oh93DYn1QTyVWmAnDMyKdQ][haystack][1]: SearchParseException[[haystack][1]: from[-1],size[-1]: Parse Failure [Failed to parse source [{"sort": [{"score": {"order": "asc", "ignore_unmapped": true, "missing": "_last"}}], "query": {"filtered": {"filter": {"fquery": {"query": {"query_string": {"query": "django_ct:(caselaw.process)"}}, "_cache": true}}, "query": {"query_string": {"query": "(3/09.0TBOBR.C1)", "default_operator": "AND", "default_field": "text", "auto_generate_phrase_queries": true, "analyze_wildcard": true}}}}, "from": 0, "size": 20}]]]; nested: QueryParsingException[[haystack] Failed to parse query [(3/09.0TBOBR.C1)]]; nested: ParseException[Cannot parse \'(3/09.0TBOBR.C1)\': Lexical error at line 1, column 17. Encountered: <EOF> after : "/09.0TBOBR.C1)"]; nested: TokenMgrError[Lexical error at line 1, column 17. Encountered: <EOF> after : "/09.0TBOBR.C1)"]; }{[oh93DYn1QTyVWmAnDMyKdQ][haystack][2]: SearchParseException[[haystack][2]: from[-1],size[-1]: Parse Failure [Failed to parse source [{"sort": [{"score": {"order": "asc", "ignore_unmapped": true, "missing": "_last"}}], "query": {"filtered": {"filter": {"fquery": {"query": {"query_string": {"query": "django_ct:(caselaw.process)"}}, "_cache": true}}, "query": {"query_string": {"query": "(3/09.0TBOBR.C1)", "default_operator": "AND", "default_field": "text", "auto_generate_phrase_queries": true, "analyze_wildcard": true}}}}, "from": 0, "size": 20}]]]; nested: QueryParsingException[[haystack] Failed to parse query [(3/09.0TBOBR.C1)]]; nested: ParseException[Cannot parse \'(3/09.0TBOBR.C1)\': Lexical error at line 1, column 17. Encountered: <EOF> after : "/09.0TBOBR.C1)"]; nested: TokenMgrError[Lexical error at line 1, column 17. Encountered: <EOF> after : "/09.0TBOBR.C1)"]; }{[oh93DYn1QTyVWmAnDMyKdQ][haystack][3]: SearchParseException[[haystack][3]: from[-1],size[-1]: Parse Failure [Failed to parse source [{"sort": [{"score": {"order": "asc", "ignore_unmapped": true, "missing": "_last"}}], "query": {"filtered": {"filter": {"fquery": {"query": {"query_string": {"query": "django_ct:(caselaw.process)"}}, "_cache": true}}, "query": {"query_string": {"query": "(3/09.0TBOBR.C1)", "default_operator": "AND", "default_field": "text", "auto_generate_phrase_queries": true, "analyze_wildcard": true}}}}, "from": 0, "size": 20}]]]; nested: QueryParsingException[[haystack] Failed to parse query [(3/09.0TBOBR.C1)]]; nested: ParseException[Cannot parse \'(3/09.0TBOBR.C1)\': Lexical error at line 1, column 17. Encountered: <EOF> after : "/09.0TBOBR.C1)"]; nested: TokenMgrError[Lexical error at line 1, column 17. Encountered: <EOF> after : "/09.0TBOBR.C1)"]; }]' 

我到底做错了什么?感谢

+0

可以肯定的是:在更改分析仪之后,应该在任何可见变化之前重新索引对象。是你做的吗? – Bjorn 2014-09-28 19:55:21

+0

哦不,我没有...现在试试 – psychok7 2014-09-28 19:59:24

+0

@Bjorn应该在我的设置文件中使用像这样ELASTICSEARCH_DEFAULT_ANALYZER =“keyword”? – psychok7 2014-09-28 20:01:48

回答

0

与草垛查询方的问题是,它使用document=True在您的搜索索引配置标记包罗万象的领域。该字段很可能没有使用关键字分析器进行分析。但你最好检查通过查看elasticsearch的输出(此列出的分析仪):

http://localhost:9200/<index-name>/?pretty=true 

在堆栈跟踪你可以看到:

“default_field”:“文本”

你不妨考虑一下有两个不同的搜索看法,如果你仍然想支持自由文本用户搜索与“正常”的输入。对于像3/09.0TBOBR.C1这样的输入的特殊搜索,您可能需要使用Haystack的SearchQuerySet.filter().narrow()方法,您可以在其中指定要搜索的字段(并且这将是明确使用keyword分析仪的字段)。对于常规文本字段,您可能不想使用关键字(==否)分析。

相关问题