部分匹配在此查询中不起作用

时间:2015-02-15 04:52:16

标签: elasticsearch wildcard

为什么以下只匹配完全匹配,而不是部分匹配?

    body: {
        query: {
            filtered: {
                filter: {
                    bool: {
                        should: [
                            { query: { match: { "name": "*"+searchterm+"*" }}},
                        ]
                    }
                }
            }
        }
    }

"*"+searchterm+"*"应匹配包含searchterm的任何字词。即,

item1
item2
0item

但它只匹配单词 exact searchterm,即仅item。这是为什么?

1 个答案:

答案 0 :(得分:5)

如果name字段使用默认分析器,则在分析阶段会删除星号通配符。因此,您始终会得到name正好sarchterm的结果。您需要使用Wildcard query来匹配name字段的值包含searchterm的任何文档。

query: {
    filtered: {
        filter: {
            bool: {
                should: [
                    {
                        query: {
                            wildcard: {
                                "name": "*" + searchterm + "*" 
                            }
                        }
                    }
                ]
            }
        }
    }
}