Elasticsearch 将嵌套字段与值数组匹配
Elasticsearch match nested field against array of values
我正在尝试使用 mongoid-elasticsearch and ElasticSearch 2.0. This has come to be quite frustrating since the trial-error didn't pay off much and the docs 在嵌套字段上应用术语查询,主题相当稀疏。
这是我的查询:
{
"query": {
"nested": {
"path": "awards",
"query": {
"bool": {
"must": [
{ "match": { "awards.year": "2010"}}
]
}
}
},
"nested":{
"path": "procuring_entity",
"query": {
"bool": {
"must": [
{ "terms": { "procuring_entity.country": ["ES", "PL"]}}
]
}
}
}
}
}
虽然 "match" 和 "term" 工作得很好,但当与 "terms" 结合查询时它 returns 没有结果,即使认为它应该。我的映射如下所示:
elasticsearch!({
prefix_name: false,
index_name: 'documents',
index_options: {
mappings: {
document: {
properties: {
procuring_entity: {
type: "nested"
},
awards: {
type: "nested"
}
}
}
}
},
wrapper: :load
})
如果 "nested" 不算作分析器(据我所知不算),那么这没有问题。至于second example,我不认为是这种情况,因为它匹配的值数组来自外部。
嵌套字段是否可以进行术语查询?难道我做错了什么?
有没有其他方法可以将嵌套字段与多个值匹配?
如有任何想法,我们将不胜感激。
我认为您需要更改映射,因为您的 nested types for this - the terms query 仅适用于 not_analyzed
字段。如果您将映射更新为:
elasticsearch!({
prefix_name: false,
index_name: 'documents',
index_options: {
mappings: {
document: {
properties: {
procuring_entity: {
type: 'nested',
properties: {
country: {
'type': 'string',
'index': 'not_analyzed'
}
}
},
awards: {
type: 'nested'
}
}
}
}
},
wrapper: :load
})
我认为如果您这样做,查询应该有效。
我正在尝试使用 mongoid-elasticsearch and ElasticSearch 2.0. This has come to be quite frustrating since the trial-error didn't pay off much and the docs 在嵌套字段上应用术语查询,主题相当稀疏。 这是我的查询:
{
"query": {
"nested": {
"path": "awards",
"query": {
"bool": {
"must": [
{ "match": { "awards.year": "2010"}}
]
}
}
},
"nested":{
"path": "procuring_entity",
"query": {
"bool": {
"must": [
{ "terms": { "procuring_entity.country": ["ES", "PL"]}}
]
}
}
}
}
}
虽然 "match" 和 "term" 工作得很好,但当与 "terms" 结合查询时它 returns 没有结果,即使认为它应该。我的映射如下所示:
elasticsearch!({
prefix_name: false,
index_name: 'documents',
index_options: {
mappings: {
document: {
properties: {
procuring_entity: {
type: "nested"
},
awards: {
type: "nested"
}
}
}
}
},
wrapper: :load
})
如果 "nested" 不算作分析器(据我所知不算),那么这没有问题。至于second example,我不认为是这种情况,因为它匹配的值数组来自外部。 嵌套字段是否可以进行术语查询?难道我做错了什么? 有没有其他方法可以将嵌套字段与多个值匹配?
如有任何想法,我们将不胜感激。
我认为您需要更改映射,因为您的 nested types for this - the terms query 仅适用于 not_analyzed
字段。如果您将映射更新为:
elasticsearch!({
prefix_name: false,
index_name: 'documents',
index_options: {
mappings: {
document: {
properties: {
procuring_entity: {
type: 'nested',
properties: {
country: {
'type': 'string',
'index': 'not_analyzed'
}
}
},
awards: {
type: 'nested'
}
}
}
}
},
wrapper: :load
})
我认为如果您这样做,查询应该有效。