玄天教学网站建设,建微信网站,哪有做网站的公司,网站制作视频教程下载文章目录 1. multi_match 查询的类型1.1 best_fields#xff08;默认#xff09;1.2 most_fields1.3 cross_fields 2. 不同类型的示例查询示例数据#xff1a; 3. 示例 1: 使用 best_fields查询#xff1a;说明#xff1a; 4. 示例 2: 使用 most_fields查询#xff1a;说… 文章目录 1. multi_match 查询的类型1.1 best_fields默认1.2 most_fields1.3 cross_fields 2. 不同类型的示例查询示例数据 3. 示例 1: 使用 best_fields查询说明 4. 示例 2: 使用 most_fields查询说明 5. 示例 3: 使用 cross_fields查询说明 6. 返回的结果对比7. 总结对比8. 总结 在 Elasticsearch 中multi_match 查询是用来在多个字段中查找匹配的文本。它有不同的 type类型例如 most_fields、best_fields 和 cross_fields这些类型在多字段查询时的匹配策略不同。了解这些类型的区别有助于在不同的场景下做出正确的查询选择。
1. multi_match 查询的类型
1.1 best_fields默认
best_fields 是 默认类型。它在多个字段上查找匹配项并返回与单个字段最匹配的结果。也就是说ES 会计算每个字段的相关性然后返回最佳的字段匹配结果。
适用场景当你希望查询中的单个字段更重要时best_fields 适合。匹配逻辑多个字段参与查询但只会选取最好的字段结果。
1.2 most_fields
most_fields 会把多个字段的匹配结果合并到一起计算最匹配的字段的相关性。每个字段会被视为一个独立的匹配源并且它们的分数会累加在一起。
适用场景当你希望多个字段的匹配对结果有较大影响时most_fields 适合。匹配逻辑多个字段的匹配结果累加最终的得分是字段得分的总和。
1.3 cross_fields
cross_fields 适用于对多个字段中的数据进行组合查询。它将多个字段合并在一起类似于一个字段查询。这对于多字段中包含相同概念的情况例如多个单词分布在不同的字段尤其有用。
适用场景当你希望将多个字段视为同一个字段的组合时cross_fields 适合。匹配逻辑多个字段被视为一个大的字段进行匹配。
2. 不同类型的示例
假设你有一个包含以下字段的 products 索引
{product_name: Wireless Mouse,description: A wireless mouse with ergonomic design,category: Electronics
}你想要对这几个字段进行查询可以使用 multi_match 来搜索多个字段。
查询示例数据
POST /products/_bulk
{ index: { _id: 1 } }
{ product_name: Wireless Mouse, description: A wireless mouse with ergonomic design, category: Electronics }
{ index: { _id: 2 } }
{ product_name: Wired Keyboard, description: A keyboard with ergonomic design, category: Electronics }
{ index: { _id: 3 } }
{ product_name: Wireless Keyboard, description: Wireless keyboard for gaming, category: Electronics }3. 示例 1: 使用 best_fields
best_fields 是默认类型表示从多个字段中选取相关性最强的字段。
查询
POST /products/_search
{query: {multi_match: {query: wireless mouse,fields: [product_name, description],type: best_fields}},explain: true
}说明 这个查询会在 product_name、description 字段上查找匹配并根据相关性返回最佳的字段匹配结果。如果 product_name 字段匹配度最高ES 会选择 product_name 字段作为最终匹配字段。
4. 示例 2: 使用 most_fields
most_fields 会将多个字段的相关性累加。
查询
POST /products/_search
{query: {multi_match: {query: wireless mouse,fields: [product_name, description],type: most_fields}},explain: true
}说明 这个查询会把 product_name、description 两个字段的匹配结果合并计算它们的总相关性并返回结果。比如product_name 和 description 都与查询的 wireless mouse 匹配时它们的相关性分数会被加在一起。
5. 示例 3: 使用 cross_fields
cross_fields 用于处理多个字段中包含的同一概念时可以把它们当作一个大的字段进行匹配。
查询
POST /products/_search
{query: {multi_match: {query: wireless mouse,fields: [product_name, description],type: cross_fields}},explain: true
}说明 这个查询会把 product_name、description 视为一个联合字段来匹配查询词 wireless mouse。即使 wireless mouse 分布在多个字段中例如product_name 包含 wirelessdescription 包含 mousecross_fields 会将它们合并为一个整体进行匹配。
6. 返回的结果对比
假设你使用了相同的查询词 wireless mouse结果的排序可能会有所不同具体取决于查询使用的类型。
best_fields选择一个字段最匹配的字段然后返回与该字段最匹配的文档。most_fields计算多个字段的得分并返回得分最高的文档。cross_fields将多个字段视为一个字段进行匹配从而查找多个字段中的联合匹配。
7. 总结对比
类型描述适用场景best_fields在多个字段上查找匹配只选择相关性最强的字段作为最终匹配结果默认。如果只关注单个最相关字段适用于精确匹配。most_fields将多个字段的相关性得分累加最终返回得分最高的结果。如果多个字段的匹配结果对最终排序有较大影响。cross_fields将多个字段合并为一个整体进行查询适用于查询词分布在不同字段中的情况。如果多个字段包含查询的不同部分且它们属于相同的概念。
8. 总结
best_fields 适用于你只关心最相关的字段结果时通常用于精确匹配查询。most_fields 适用于你希望多个字段的匹配都能影响查询结果时适合宽松匹配。cross_fields 适用于你希望将多个字段视为一个字段的组合时尤其是在查询词分布在不同字段中时。