多词搜索 NEST C#

Posted

技术标签:

【中文标题】多词搜索 NEST C#【英文标题】:Multi Terms search NEST C# 【发布时间】:2013-10-06 20:59:11 【问题描述】:

我想做一个匹配多个值(值数组)的搜索,如下所示:

var result1 = _client.Search<type1>(s => s
            .Fields(f => f.trip_id)
            .Query(q => q
                .Terms(t => t.arg1, value1)).Take(_allData))
                .Documents.Select(d => d.arg2).ToArray();

var result2 = _client.Search<type2>(s => s
                      .Query(q => q
                          .Terms(t => t.arg3, result1))
                          .Take(_allData)
                          ).Documents.Select(s => s.ar3).ToList();

我该怎么办?我在考虑方面,但我不知道我该怎么做。 目前唯一可行的方法是使用 foreach 迭代器,这不是很有效......

感谢您的帮助。

【问题讨论】:

【参考方案1】:

您可以像这样表达多个查询:

.Query(q=>q.Terms(t=>t.arg3, result1) && q.Terms(t=>t.arg1, value1))

请务必阅读documentation on writing queries,了解 NEST 提供的所有好东西。

【讨论】:

感谢您的回答,但最后我使用了Filter DSL,而不是让我通过的Query DSL.And( af=&gt;af.Term(...), af=&gt;af.Term(...) ) 你能更新上面的网址吗?目前不可用。 t.arg1 应该是 t=>t.arg1 @Orelus 你应该写下你的评论作为答案,因为它是正确的答案并且对我有用。【参考方案2】:

Orelus, 我想将您的解决方案用于

.And( af=>af.Term(...), af=>af.Term(...) )

我不明白这适合哪里,这是我的非工作过滤器的示例

var results = client.Search<music>(s => s
    .Query(q => q
        .Filtered(f => f.
            Filter(b => b.Bool(m => m.Must(
                t => t
                    .Term(p => p.artist, artist)
                     && t.Term(p2 => p2.year, year)
                )
                )
            )
        )
    )
    );

【讨论】:

以上是关于多词搜索 NEST C#的主要内容,如果未能解决你的问题,请参考以下文章

NEST 搜索整个文档 C# Elasticsearch

为弹性搜索指定和使用带有 C# NEST 客户端的 NGramTokenizer

Nest Client c# 7.0 用于弹性搜索删除别名

使用 NEST 字段提升的弹性搜索

多词包含全文搜索仅在 SQL Server 中部分工作

从 Twitter 搜索 API 中排除多词关键字