Elasticsearch - 不需要完全匹配

时间:2015-03-19 12:24:46

标签: python search elasticsearch

目前,我的弹性搜索索引中有一个项目标题为:testing123

当我搜索它时,如果我完全搜索testing123,我只能返回它。但是,我希望能够搜索testing并将其返回。

我怎样才能拥有它,所以搜索必须从该术语开始,但也不是完全匹配?

2 个答案:

答案 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