2014-09-28 49 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分析儀的字段)。對於常規文本字段,您可能不想使用關鍵字(==否)分析。