我正在尝试将产品列表的标题与已知产品的数据库相匹配。我的第一个想法是将已知产品及其元数据放入elasticsearch并尝试找到与multi_match的最佳匹配。我当前的查询类似于:
{
"query": {
"multi_match" : {
"query": "Men's small blue cotton pants SKU123",
"fields": ["sku^2","title","gender","color", "material","size"],
"type" : "cross_fields"
}
}
}
问题是有时它会返回错误颜色的产品。有没有办法我可以修改上面的查询只对我的索引中的项目进行评分,其颜色字段等于查询字符串中存在的单词?我正在使用elasticsearch 5.1。
答案 0 :(得分:1)
如果您希望elasticsearch仅对符合特定条件的项目进行评分,则需要在过滤器上下文中使用terms query。
由于terms query
不会分析您的查询,因此您必须自己执行此操作。简单的事情是用空格和小写标记化,并生成如下所示的查询:
{
"query": {
"bool": {
"filter": {
"terms": {
"color": ["men's", "small", "blue", "cotton", "pants", "sku123"]
}
},
"must": {
"multi_match": {
"query": "Men's small blue cotton pants SKU123",
"fields": [
"sku^2",
"title",
"gender",
"material",
"size"
],
"type": "cross_fields"
}
}
}
}
}