lucene ElasticSearch查询:提取前缀与typeahead查询匹配的所有结果,自动完成功能

gcuhipw9  于 2022-11-07  发布在  Lucene
关注(0)|答案(1)|浏览(196)

| 查询|
| - -|
| 我叫什么名字|
| 什么是谷歌|
| 什么是堆栈溢出|
| 如何搜索|
所以,我想有一个ElasticSearch索引,其中有如上所述的文档。我想获取所有的结果,前缀匹配的查询。例如,当查询“什么是”,我需要{“什么是我的名字”,“什么是谷歌”,“什么是stackoverflow”}作为结果,确切的前缀匹配。
如何开始创建索引?如果可能,还可以创建示例查询。
先谢谢你。

42fyovps

42fyovps1#

multiple ways来实现你想要的,但最简单的是使用prefix query,如果你只是把你的数据直接索引到Elasticsearch而不定义Map,它会自动为你创建两个字段,并且在.keyword字段上你可以使用如下所示的前缀查询。

索引示例文档

PUT <your-es-index>/_doc/1

{
    "title" : "what is my name"
}

PUT <your-es-index>/_doc/2

{
    "title" : "what is google"
}

PUT <your-es-index>/_doc/3

{
    "title" : "what is stackoverflow"
}

PUT <your-es-index>/_doc/4

{
    "title" : "how to search"
}

搜索查询

POST /搜索(_S)

{
    "query": {
        "prefix": {
            "title.keyword": {
                "value": "what is"
            }
        }
    }
}

您预期的搜索结果

"hits": [
            {
                "_index": "72391510",
                "_id": "1",
                "_score": 1.0,
                "_source": {
                    "title": "what is my name"
                }
            },
            {
                "_index": "72391510",
                "_id": "2",
                "_score": 1.0,
                "_source": {
                    "title": "what is google"
                }
            },
            {
                "_index": "72391510",
                "_id": "3",
                "_score": 1.0,
                "_source": {
                    "title": "what is stackoverflow"
                }
            }

相关问题