【发布时间】:2017-08-07 15:26:07
【问题描述】:
我有这样的查询(我已经删除了排序部分,因为它无关紧要):
GET _search
{
"query": {
"multi_match": {
"query": "somethi",
"fields": [ "title", "content"],
"fuzziness" : "AUTO",
"prefix_length" : 0
}
}
}
运行此程序时,我得到如下结果:
"hits": [
{
"_index": "test_index",
"_type": "article",
"_id": "2",
"_score": 0.083934024,
"_source": {
"title": "Matching something abc",
"content": "This is a piece of content",
"categories": [
{
"name": "B",
"weight": 4
}
]
},
"sort": [
4,
0.083934024,
"article#2"
]
},
{
"_index": "test_index",
"_type": "article",
"_id": "3",
"_score": 0.18436861,
"_source": {
"title": "Matching something abc",
"content": "This is a piece of content containing something",
"categories": [
{
"name": "C",
"weight": 3
}
]
},
"sort": [
3,
0.18436861,
"article#3"
]
},
...
所以得到预期的结果没有问题。但是我注意到,我从查询中删除了一个字母以改为 someth,Elasticsearch 不会返回任何结果。
这对我来说很奇怪。 multi_match 似乎在进行部分匹配,但不知何故需要使用最少的 x 个字符。同样,如果我尝试输入查询,例如omethin 我会得到结果,但只使用omethi 我不会得到任何结果。
是否有任何设置来设置查询中的最小字符数,或者我可能需要重写我的查询以实现我想要的?我想在多个字段上运行匹配(在上面对标题和内容字段的查询中),这将允许部分匹配和模糊性。
【问题讨论】:
标签: elasticsearch