我在索引中存储了一堆产品。假设以下是单个产品的示例:
'productID' => 'sandbag'
'productName' => 'Bag of sand'
'productDescription' => 'A bag of sand'
'sizes' => array
0 =>
'sizeID' => '1wht'
'sizeName' => '1 lb white'
1 =>
'sizeID' => '1blk'
'sizeName' => '1 lb black'
2 =>
'sizeID' => '2wht'
'sizeName' => '2 lb white'
3 =>
'sizeID' => '2blk'
'sizeName' => '2 lb black'
黑色1磅的ElasticSearch查询会显示该产品。但是,不会查询 1磅重的黑色沙子。
如果我将所有空格替换为AND,则查询变为黑色AND 1 AND lb AND sand ,它就会出现,但是这似乎杀死了一个引用的查询,例如“ 1 lb black “沙子。
我的ElasticSearch查询如下:
"query": {
"query_string": {
"query": "black 1 lb sand",
"default_operator": "AND",
"fields": ["productName", "sizes.sizeName"]
}
}
最终的目标是能够在一个查询中匹配大小和产品名称(以及我想要的任何其他名称),并在客户需要时支持带引号的短语(“ 1磅黑色”)。
我不想将运算符切换为OR,因为这样会带来太多的产品。
帮助?
答案 0 :(得分:0)
阅读文档后,我设法自己弄清楚了。在这里发布给以后遇到相同问题的其他人。
只需在https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html#multi-match-types中将“类型”设置为“跨字段”
因此搜索查询变为:
"query": {
"query_string": {
"query": "black 1 lb sand",
"default_operator": "AND",
"type": "cross_fields",
"fields": ["productName", "sizes.sizeName"]
}
}