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

fan*_*ats 3 wildcard elasticsearch

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

    body: {
        query: {
            filtered: {
                filter: {
                    bool: {
                        should: [
                            { query: { match: { "name": "*"+searchterm+"*" }}},
                        ]
                    }
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

"*"+searchterm+"*"应匹配任何包含的单词searchterm.即

item1
item2
0item
Run Code Online (Sandbox Code Playgroud)

但它只匹配单词确切, searchterm即仅匹配item.为什么是这样?

bit*_*kar 5

如果该name字段使用默认分析器,则在分析阶段将删除星号通配符.因此,您总能获得name完全正确的结果sarchterm.您需要使用通配符查询来匹配name字段值包含的任何文档searchterm.

query: {
    filtered: {
        filter: {
            bool: {
                should: [
                    {
                        query: {
                            wildcard: {
                                "name": "*" + searchterm + "*" 
                            }
                        }
                    }
                ]
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)