ElasticSearch查询-在2个字段上搜索

ilmyapht  于 2023-03-12  发布在  ElasticSearch
关注(0)|答案(1)|浏览(179)

我遇到了一些问题,为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属性始终只是一个简短的首字母缩写词,可以将其添加到末尾以缩小代码搜索范围。
我怎样才能让它工作?

相关问题