NEST:如何将具有一个元素的文档与多值匹配,找到任何字段匹配以过滤值

时间:2016-02-05 04:11:46

标签: elasticsearch nest

    var results = client.MultiSearch(a => a
                                    .Search<StockBaseEntity>(s => s
                                      .Type("item")
                                      .Take(3)
                                           .Query(qq =>
                                                  qq.Filtered(ft => ft
                                                      .Filter(f => f
                                                          .Bool(bb => bb.Must(ms =>
{
          FilterInputs mustfilters;
          mustfilters &= ms.Terms("cityId", filterInputs.cities);
}

filterInputs.cities是字符串数组。 (串[])

我在这里没有提到完整的多搜索查询。

但它返回(假设城市是1,2,3,4):

  1. 如果document元素有cityId 1且filterInputs.cities有1, 此记录已退回。
  2. 如果文档元素具有cityId 3 AND filterInputs.cities有1,3这条记录被返回。
  3. 如果是文件 element有cityId 4 AND filterInputs.cities有1,2这个记录是 返回。
  4. ms.Terms基本上匹配filterInputs.cities中任何特定城市并返回文档。

    我们已经更改了文件。现在我们有“城市”而不是“cityId”。 “cities”可以有多个逗号分隔的cityIds。 所以,新的行为应该是:

    1. 如果document元素包含cities 1且filterInputs.cities为1,则返回此记录。
    2. 如果文档元素具有城市3,4并且filterInputs.cities具有1,3,则返回此记录。
    3. 如果文档元素引用1,2,4 AND filterInputs.cities有1,2,则返回此记录。
    4. 如果文档元素引用1,2 AND filterInputs.cities为3,4,则不返回此记录。
    5. 此处它也应匹配任何事件,否则返回false。我该如何修改嵌套查询?

1 个答案:

答案 0 :(得分:0)

您只需要分析“城市”字段,最终它包含一系列城市ID。那么你提到的所有场景都会奏效。您可以使用Pattern Analyzer