目前,我在elasticsearch索引中有一个标题为testing123的项目。

当我搜索它时,只有精确搜索testing123才能返回它。但是,我希望能够搜索testing并返回它。

我怎么拥有它,所以搜索必须以该词开头但又不是完全匹配?

最佳答案

在映射中使用Simple Analyzer

创建一个索引,使用标准(默认)分析器和简单分析器对title字段进行索引:

POST /demo
{
    "mappings": {
        "doc": {
            "properties": {
                "title": {
                    "type": "string",
                    "fields": {
                        "simple": {
                            "type": "string",
                            "analyzer": "simple"
                        }
                    }
                }
            }
        }
    }
}

索引文件
POST /demo/doc/1
{
    "title": "testing123"
}

最后,使用multi_match查询进行搜索:
POST /demo/doc/_search
{
    "query": {
        "multi_match": {
            "fields": [
                "title",
                "title.simple"
            ],
            "query": "testing"
        }
    }
}

该查询返回文档。如果您要将查询字词更改为testing123,也将有一个匹配项。

另一种可能的解决方案是使用Prefix Query

09-28 07:14