目前,我在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。