Django Haystack ElasticSearch 分析器

2024-10-03 23:27:41 发布

您现在位置:Python中文网/ 问答频道 /正文

所以基本上我正在尝试在Haystack中为我的Elasticsearch后端添加一个分析器,到目前为止我还没有运气。在

我试图查询类似于3/09.0TBOBR.C1的内容,但我得到了很多错误。我被告知分析器是我问题的解决方案,所以我尝试使用keyword分析器

我试过这样:

class ConfigurableElasticBackend(ElasticsearchSearchBackend):

    DEFAULT_ANALYZER = "keyword"

我在我的设置文件中也尝试过这样做:

^{pr2}$

我在改变后重建了索引

我的错误消息是:

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)"]; }]'

我做错什么了?谢谢


Tags: tofromtruedefaultsizestringparseerror
1条回答
网友
1楼 · 发布于 2024-10-03 23:27:41

haystack查询端的问题是,它在搜索索引配置中使用了由document=True标记的catch all字段。这个字段很可能没有用关键字分析器分析。但是,您最好通过查看elasticsearch的输出来检查这一点(这里列出了分析器):

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

在堆栈跟踪中可以看到:

“default_field”:“文本”

如果您还想用“普通”输入支持自由文本用户搜索,您可以考虑使用两个不同的搜索视图。对于像3/09.0TBOBR.C1这样的输入的特殊搜索,您可能需要使用Haystack的.filter()或{}方法,在这里您可以指定要搜索的字段(这将是您使用keyword分析器的显式字段)。对于常规文本字段,您可能不希望使用关键字(==no)分析。在

相关问题 更多 >