目前,我的弹性搜索索引中有一个项目标题为:testing123
。
当我搜索它时,如果我完全搜索testing123
,我只能返回它。但是,我希望能够搜索testing
并将其返回。
我怎样才能拥有它,所以搜索必须从该术语开始,但也不是完全匹配?
答案 0 :(得分:1)
我相信你正在寻找wildcards。
匹配具有与通配符表达式匹配的字段的文档。支持的通配符是*,它匹配任何字符序列(包括空字符序列)和?,它匹配任何单个字符。
通配符基本上是“匹配任何东西”。所以你的搜索看起来像
testing*
匹配
测试
是testing123
testingthings
但不匹配
test123ing
或
测试
答案 1 :(得分:1)
在映射中使用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。