0

我有一个名为的字段位于嵌套字段“名称”内,该字段是弹性搜索中的“关键字”。

名称字段包含 2 个值。

  1. 贾格纳坦·拉贾戈帕兰
  2. 拉贾戈帕兰。

如果我查询“Rajagopalan”,我应该只得到项目#2。如果我查询完整的 Jagannathan Rajagopalan,我应该得到 #1。

我如何实现它?

4

1 回答 1

1

您需要使用用于精确搜索的术语查询。根据您的用例添加了一个工作示例。

索引映射

{
    "mappings": {
        "properties": {
            "name": {
                "type": "nested",
                "properties": {
                    "keyword": {
                        "type": "keyword"
                    }
                }
            }
        }
    }
}

索引示例文档

{
    "name" : {
        "keyword" : "Jagannathan Rajagopalan"
    }
}

还有另一个文档

{
    "name" : {
        "keyword" : "Jagannathan"
    }
}

和搜索查询

{
    "query": {
        "nested": {
            "path": "name",
            "query": {
                "bool": {
                    "must": [
                        {
                            "match": {
                                "name.keyword": "Jagannathan Rajagopalan"
                            }
                        }
                    ]
                }
            }
        }
    }
}

搜索结果

   "hits": [
            {
                "_index": "key",
                "_type": "_doc",
                "_id": "2",
                "_score": 0.6931471,
                "_source": {
                    "name": {
                        "keyword": "Jagannathan Rajagopalan"
                    }
                }
            }
        ] 
于 2020-11-04T11:00:56.080 回答