弹性搜索中具有动态字段的过滤器
Filters with dynamic fields in elasticsearch
我正在将非常旧的 ElasticSearch 版本切换到 6.5 版。
...
"text_mined_entities": {
"nlp": {
"abbreviations": [],
"chunks": [],
"recurring_chunks": [],
"tagged_entities_grouped": {
"NEURO|SCICRUNCH": [
{
"category": "NEURO",
"end": 41,
"label": "Infant",
"match": "infant",
"original_value": "Infant",
"reference": "BIRNLEX695",
"reference_db": "SCICRUNCH",
"sentence": 0,
"start": 35
},
...
我想过滤 text_mined_entities.nlp.tagged_entities_grouped.*.reference 字段(存储为 'keyword' ),但运气不佳。类似于:
GET _search
{
"query": {
"bool": {
"filter": { "term": {
"text_mined_entities.nlp.tagged_entities_grouped.*.reference": "BIRNLEX695"
}}
}
}
}
有什么建议吗?谢谢。
不能对字段查询应用通配符。相反,您可以使用 query_string ,它也支持字段上的通配符。所以以下将起作用:
假设 text_mined_entities
和 nlp
的类型是 nested
{
"query": {
"nested": {
"path": "text_mined_entities.nlp",
"query": {
"query_string": {
"query": "BIRNLEX695",
"fields": [
"text_mined_entities.nlp.tagged_entities_grouped.*.reference"
]
}
}
}
}
}
更新(如果text_mined_entities
和nlp
是object
类型而不是nested
):
{
"query": {
"query_string": {
"query": "BIRNLEX695",
"fields": [
"text_mined_entities.nlp.tagged_entities_grouped.*.reference"
]
}
}
}
我正在将非常旧的 ElasticSearch 版本切换到 6.5 版。
...
"text_mined_entities": {
"nlp": {
"abbreviations": [],
"chunks": [],
"recurring_chunks": [],
"tagged_entities_grouped": {
"NEURO|SCICRUNCH": [
{
"category": "NEURO",
"end": 41,
"label": "Infant",
"match": "infant",
"original_value": "Infant",
"reference": "BIRNLEX695",
"reference_db": "SCICRUNCH",
"sentence": 0,
"start": 35
},
...
我想过滤 text_mined_entities.nlp.tagged_entities_grouped.*.reference 字段(存储为 'keyword' ),但运气不佳。类似于:
GET _search
{
"query": {
"bool": {
"filter": { "term": {
"text_mined_entities.nlp.tagged_entities_grouped.*.reference": "BIRNLEX695"
}}
}
}
}
有什么建议吗?谢谢。
不能对字段查询应用通配符。相反,您可以使用 query_string ,它也支持字段上的通配符。所以以下将起作用:
假设 text_mined_entities
和 nlp
的类型是 nested
{
"query": {
"nested": {
"path": "text_mined_entities.nlp",
"query": {
"query_string": {
"query": "BIRNLEX695",
"fields": [
"text_mined_entities.nlp.tagged_entities_grouped.*.reference"
]
}
}
}
}
}
更新(如果text_mined_entities
和nlp
是object
类型而不是nested
):
{
"query": {
"query_string": {
"query": "BIRNLEX695",
"fields": [
"text_mined_entities.nlp.tagged_entities_grouped.*.reference"
]
}
}
}