use*_*340 5 java elasticsearch
我在弹性搜索中有以下json结构存储@ http://localhost:9200/mongoindex/documents/:
{
"text" : "OTesting1"
"otag" : "otag1"
"pages" : [{
"text" : "1"
"name" : "itag1"
}, {
"text" : "2"
"name" : "itag2"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我已创建嵌套映射,如下所示,以启用嵌套搜索和嵌套过滤器:
http://localhost:9200/mongoindex/documents/_mapping [PUT]
{
"documents": {
"properties": {
"pages": {
"type": "nested"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在执行以下java代码:
Settings settings = ImmutableSettings.settingsBuilder()
.put("cluster.name", "xyz").build();
Client client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress("localhost", 9300));
SearchResponse response = client.prepareSearch("mongoindex")
.setTypes("documents")
.setQuery(QueryBuilders.nestedQuery("documents", QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("pages.text", "1"))).scoreMode("avg"))
.execute()
.actionGet();
Run Code Online (Sandbox Code Playgroud)
但它给了我以下例外:
> Exception in thread "main"
> org.elasticsearch.action.search.SearchPhaseExecutionException: Failed
> to execute phase [query], total failure; shardFailures
> {[kSKaBxjGTMSS352kukrYVw][mongoindex][0]:
> SearchParseException[[mongoindex][0]: from[-1],size[-1]: Parse Failure
> [Failed to parse source
> [{"query":{"nested":{"query":{"bool":{"must":{"match":{"pages.text":{"query":"1","type":"boolean"}}}}},"path":"documents","score_mode":"avg"}}}]]];
> nested: QueryParsingException[[mongoindex] [nested] nested object
> under path [documents] is not of nested type];
> }{[kSKaBxjGTMSS352kukrYVw][mongoindex][4]:
> SearchParseException[[mongoindex][4]: from[-1],size[-1]: Parse Failure
> [Failed to parse source
> [{"query":{"nested":{"query":{"bool":{"must":{"match":{"pages.text":{"query":"1","type":"boolean"}}}}},"path":"documents","score_mode":"avg"}}}]]];
> nested: QueryParsingException[[mongoindex] [nested] nested object
> under path [documents] is not of nested type]; }
Run Code Online (Sandbox Code Playgroud)
根据您的情况,您必须在嵌套查询中指定嵌套对象的路径"path" : "pages"。我不熟悉 Java 语法,但等效的 REST 请求如下所示:
{
"nested" : {
"path" : "pages",
"score_mode" : "avg",
"query" : {
"bool" : {
"must" : [
{
"match" : {"pages.text" : "1"}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
与之相关的是,ElasticSearch 错误消息的最后一行通常包含您需要调试的信息(而其余部分则非常无用和/或重复)。所以这是关键部分:
QueryParsingException[[mongoindex] [nested] 路径 [documents] 下的嵌套对象不是嵌套类型]; }
| 归档时间: |
|
| 查看次数: |
3151 次 |
| 最近记录: |