是否可以尝试在elasticsearch中查询空字符串而不会出错? 在我的情况下现在的情况是有一些单词存储在索引中,我会收到一些数据,我想用这种数据作为查询数据。我无法控制数据,因此有时数据可能是空字符串。 E.g。
query={"query":{"query_stirng":{"query":""}}}
Caused by: org.apache.lucene.queryparser.classic.ParseException: Cannot parse ' ': Encountered "<EOF>" at line 1, column 3.
Was expecting one of:
<NOT> ...
"+" ...
"-" ...
<BAREOPER> ...
"(" ...
"*" ...
<QUOTED> ...
<TERM> ...
<PREFIXTERM> ...
<WILDTERM> ...
<REGEXPTERM> ...
"[" ...
"{" ...
<NUMBER> ...
<TERM> ...
"*" ...
at org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:126)
at org.elasticsearch.index.query.QueryStringQueryParser.parse(QueryStringQueryParser.java:213)
... 15 more
Caused by: org.apache.lucene.queryparser.classic.ParseException: Encountered "<EOF>" at line 1, column 3.
Was expecting one of:
<NOT> ...
"+" ...
"-" ...
<BAREOPER> ...
"(" ...
"*" ...
<QUOTED> ...
<TERM> ...
<PREFIXTERM> ...
<WILDTERM> ...
<REGEXPTERM> ...
"[" ...
"{" ...
<NUMBER> ...
<TERM> ...
"*" ...
at org.apache.lucene.queryparser.classic.QueryParser.generateParseException(QueryParser.java:708)
at org.apache.lucene.queryparser.classic.QueryParser.jj_consume_token(QueryParser.java:590)
at org.apache.lucene.queryparser.classic.QueryParser.Clause(QueryParser.java:275)
at org.apache.lucene.queryparser.classic.QueryParser.Query(QueryParser.java:181)
at org.apache.lucene.queryparser.classic.QueryParser.TopLevelQuery(QueryParser.java:170)
at org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:121)
... 16 more
可以使用elasticsearch来解决这个问题,还是必须使用代码来解决这个问题? 这样我可以使用elasticsearch接收空数据和查询,elasitcsearch不会导致任何问题吗?
环境: Ubuntu 12.04桌面64位
elasticsearch 0.90.7&gt;&gt;单节点
编程语言:python
答案 0 :(得分:1)
我想在这种情况下可能会缺少过滤器:
{
"query": {
"filtered": {
"filter": {
"missing": {
"field": "user",
"existence": true,
"null_value": true
}
}
}
}
}
答案 1 :(得分:0)
我想现在不可能。您需要使用一些try-catch机制(异常处理)在代码中处理它。
答案 2 :(得分:0)
我遇到了包含空字符串值的字符串字段的类似问题。使用查询DSL,我设法通过使用以下方式获取空字符串:(如果文档包含&#34;字段&#34;:&#34;&#34;)
"query": {
"query_string": {
"query": "( _exists_:field && -field:* )"
}
}
这基本上意味着,&#34;字段不为空,并且它不是任何字符串&#34;。
同样,排除空字符串将是:
"query": {
"query_string": {
"query": "( _missing_:field || field:* )"
}
}
表示&#34;字段为空或任何字符串&#34;。