首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ElasticSearch:在数组中进行全文搜索,忽略所查找的文本是数组元素的一部分的文档

ElasticSearch:在数组中进行全文搜索,忽略所查找的文本是数组元素的一部分的文档
EN

Stack Overflow用户
提问于 2020-08-28 15:49:59
回答 1查看 118关注 0票数 1

我已经有了。5.4.3

文件具有这样的映射:

代码语言:javascript
运行
复制
mappings {
    folders {
        properties {
            id {
                type "long"
            }
            records {
                properties {
                    name {
                        type "text"
                    }
                }
            }
        }
    }
}

我有两个文件(“文件夹”):

代码语言:javascript
运行
复制
[
    {
        id: 1,
        records: [
            {
                name: "foo"
            }
        ]
    },
    {
        id: 2,
        records: [
            {
                name: "foo bar"
            }
        ]
    }
]

预期结果:如果正在请求"foo“(而不是两者),则只返回"foo”文件夹,如果请求"foo bar“,则只返回"foo bar”。

我尝试使用"match_phrase“查询,在"foo bar”的情况下,它工作得很好,但是如果我将它与"foo“ES一起使用,则会返回两个”文件夹“。

我的问题查询是:

代码语言:javascript
运行
复制
{
    "query": {
        "bool": {
            "must": {
                "match_phrase": {
                    "records.name": "foo"
                }
            }
        }
    }
}

如果请求"foo“,有谁知道是否有一些只返回id=1的选项?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-28 18:19:15

如果您的字段records.name为关键字类型,则可以使用术语查询

如果索引映射中只有文本类型的records.name,最好将其keyword字段添加为多个字段,这样就可以使用records.name进行文本匹配,而将records.name.keyword用于精确匹配。

添加一个具有索引映射、数据和搜索查询的工作示例。(在Elasticsearch版本5.6中尝试了下面的搜索查询)

指数映射

代码语言:javascript
运行
复制
{
  "mappings": {
    "doc": {
      "properties": {
        "records": {
          "properties": {
            "name": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword"
                }
              }
            }
          }
        }
      }
    }
  }
}

索引数据

代码语言:javascript
运行
复制
{
    "id": 1,
    "records": [
        {
            "name": "foo"
        }
    ]
}

{
    "id": 2,
    "records": [
        {
            "name": "foo bar"
        }
    ]
}

搜索查询

代码语言:javascript
运行
复制
{
    "query": {
        "term": {
            "records.name.keyword": "foo"
        }
    }
}

搜索结果

代码语言:javascript
运行
复制
"hits": [
            {
                "_index": "my_index",
                "_type": "doc",
                "_id": "1",
                "_score": 0.2876821,
                "_source": {
                    "id": 1,
                    "records": [
                        {
                            "name": "foo"
                        }
                    ]
                }
            }
        ]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63637094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档