用于嵌套查询的 ElasticSearch 相邻词
ElasticSearch adjacent words for nested queries
我正在使用 ES 7.14/Kibana 7.10,我必须搜索相邻的词(任何顺序),因此我正在使用此查询:
{
"query":{
"bool":{
"must":[
{
"query_string":{
"query":"*antonio* *banderas*",
"fields":[
"text"
],
"default_operator":"and",
}
}]
}
}
}
这适用于 text
普通字段。现在,我有一个嵌套字段 metadata
,假设映射是
{
"mappings:": {
"properties": {
"text": {
"type": "text"
},
"metadata": {
"type": "nested",
"properties": {
"text": {
"type": "text"
}
}
}
}
}
}
并且我想以相同的方式搜索嵌套字段(相邻词搜索),因此假设可以用 方式为 query_string
编写嵌套查询
{
"query": {
"query_string": {
"query": "metadata.text:*antonio* *banderas*"
}
}
}
如何使这种方法适用于 default_operator=and
等之前的方法?如果我这样做
{
"query": {
"query_string": {
"query": "metadata.text:*antonio* *banderas*",
"default_operator": "and"
}
}
}
我没有得到任何结果(但也有任何错误)。
一个类似的问题是 。
不应使用 query_string
搜索任何顺序的相邻单词,而是 wildcard
或 match
或 term
或 span_term
还有一种映射类型 wildcard
针对此用途进行了优化,具体取决于您需要的查询类型。
所以给你第一个例子:
{
"query": {
"bool": {
"must": [
{
"wildcard": {
"text": "*antonio*"
}
},
{
"wildcard": {
"text": "*banderas*"
}
}
]
}
}
}
或
{
"query": {
"bool": {
"must": [
{
"wildcard": {
"text": "*antonio*banderas*"
}
}
]
}
}
}
对于嵌套查询:
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "metadata",
"query": {
"bool": {
"must": [
{
"wildcard": {
"metadata.text": "*antonio*"
}
},
{
"wildcard": {
"metadata.text": "*banderas*"
}
}
]
}
}
}
}
]
}
}
}
我正在使用 ES 7.14/Kibana 7.10,我必须搜索相邻的词(任何顺序),因此我正在使用此查询:
{
"query":{
"bool":{
"must":[
{
"query_string":{
"query":"*antonio* *banderas*",
"fields":[
"text"
],
"default_operator":"and",
}
}]
}
}
}
这适用于 text
普通字段。现在,我有一个嵌套字段 metadata
,假设映射是
{
"mappings:": {
"properties": {
"text": {
"type": "text"
},
"metadata": {
"type": "nested",
"properties": {
"text": {
"type": "text"
}
}
}
}
}
}
并且我想以相同的方式搜索嵌套字段(相邻词搜索),因此假设可以用 query_string
编写嵌套查询
{
"query": {
"query_string": {
"query": "metadata.text:*antonio* *banderas*"
}
}
}
如何使这种方法适用于 default_operator=and
等之前的方法?如果我这样做
{
"query": {
"query_string": {
"query": "metadata.text:*antonio* *banderas*",
"default_operator": "and"
}
}
}
我没有得到任何结果(但也有任何错误)。
一个类似的问题是
不应使用 query_string
搜索任何顺序的相邻单词,而是 wildcard
或 match
或 term
或 span_term
还有一种映射类型 wildcard
针对此用途进行了优化,具体取决于您需要的查询类型。
所以给你第一个例子:
{
"query": {
"bool": {
"must": [
{
"wildcard": {
"text": "*antonio*"
}
},
{
"wildcard": {
"text": "*banderas*"
}
}
]
}
}
}
或
{
"query": {
"bool": {
"must": [
{
"wildcard": {
"text": "*antonio*banderas*"
}
}
]
}
}
}
对于嵌套查询:
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "metadata",
"query": {
"bool": {
"must": [
{
"wildcard": {
"metadata.text": "*antonio*"
}
},
{
"wildcard": {
"metadata.text": "*banderas*"
}
}
]
}
}
}
}
]
}
}
}