我遇到了一些问题,为ElasticSearch获得正确的查询。当搜索2个字段时,它给出了意外的结果。
假设有了这些文件:
[
{ name: 'Infernoble', code: 'MP21' },
{ name: 'Infernoble', code: 'AMDE' },
{ name: 'A Cell Device', code: 'FOTB' }
]
我在这两个字段上使用searchkit的MultiMatchQuery
,它将以下查询发送到ElasticSearch:
{
"bool": {
"should": [
{
"multi_match": {
"query": "<my query term>",
"fields": [
"name",
"code"
],
"type": "best_fields",
"operator": "and"
}
},
{
"multi_match": {
"query": "<my query term>",
"fields": [
"name",
"code"
],
"type": "cross_fields"
}
},
{
"multi_match": {
"query": "<my query term>",
"fields": [
"name",
"code"
],
"type": "phrase"
}
},
{
"multi_match": {
"query": "<my query term>",
"fields": [
"name",
"code"
],
"type": "phrase_prefix"
}
}
]
}
}
目前,如果我搜索“Infernoble”,我会正确获得前2个文档。
当我搜索“Infernoble AMDE”时,我希望它将第二个文档放在前面(假定它有name:'Infernoble'
和code: 'AMDE'
),
相反,“Infernoble AMDE”在顶部给出了与“Infernoble”相同的结果。
此外,“Infernoble A”将第三十三个文档放在前面(因为它以“A”开头),忽略了存在名为“Inferno”的文档。code
属性始终只是一个简短的首字母缩写词,可以将其添加到末尾以缩小代码搜索范围。
我怎样才能让它工作?
1条答案
按热度按时间9jyewag01#
您需要使用nested field type,而不是object。