基于MongoDB中文档属性的弹性/最近搜索

时间:2017-06-27 18:11:03

标签: mongodb elasticsearch best-fit

我们需要根据MongoDB中的文档属性完成最近的搜索。

让我们举一个例子,MongoDB中有一个Car架构,信息将存储为类似于:

{
  Make: "Hyundai",
  Model: "Creta",
  Title: "Hyundai Creta E 1.6 Petrol",
  Description: "Compact SUV",
  Feature: {
    ABS:    true,
    EBD:    true,
    Speakers: 4,
    Display: false
  },
  Specification: {
    Length: "4270 mm",
    Width: "1780 mm",
    Height: "1630 mm",
    Wheelbase:  "2590 mm",
    Doors:  5,
    Seating:    5,
    Displacement: "1591 cc"
  },
  Safety: {
    Airbags: 2,
    SeatBeltWarning: false
  },
  Maintenance: {
    LastService: "21/06/2016",
    WashingDone: true
  }
}

需要根据以下标准提供搜索:

1. Make
2. Model
3. ABS
4. Seating
5. Displacement
6. Airbags

现在结果应包含3个或更多属性匹配的记录(完全匹配),并根据匹配的最大属性数排序。

使用MongoDB实现此功能的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以编写一些内容来为每个三元组字段生成文档,然后将它们与$or放在一起,生成类似

的内容
{$or: [
    {Make: "Hyundai", Model: "Creta", Feature.ABS: true},
    {Make: "Hyundai", Model: "Creta", Specification.Seating: 5},
    ...
]}

排序可能需要sorting by textScore