如何使用Nest客户端在Elasticsearch中通过数组搜索数组属性

6
假设我们有一个名为acls的类,这个类有一个名为lprop的List属性。
现在假设我有另一个List,其中包含值1、3、5,假设这个变量的名称是tosearch。
我想在elasticsearch的索引中使用nest搜索tosearch值,只需要找到一个匹配项即可,搜索范围是acls类型记录的lprop属性。
例如:
    `public class acls
    {
        public List<int> lprop {get;set;}
    }
    public void main()
    {
        //.. creating connection and etc..
        // we have 3 recs of acls
        // 1. lprop values: 2,4,6,8
        // 2. lprop values: 1,9,0,4
        // 3. lprop values: 6,7,8
        List<int> tosearch = new int[] { 1, 3, 5 }.ToList();
        //Now I want to search tosearch values in acls lprop values.
        // Result should be: 2. records
    }`
1个回答

9
使用一个“Terms”查询。请参考Terms query
client.Search<acls>(s => s
    .Query(q => q
        .Terms(c => c
            .Field(p => p.lprop)
            .Terms<string>(tosearch)
        )
    )
);

tosearch变量是一个包含要匹配的值的List<int>,一个查询足够吗?还是我应该生成更多的术语查询并将它们进行OR操作? - zokkan
1
terms查询对传递的术语执行OR操作,即文档字段只需要匹配一个术语就会被视为匹配。文档有更多详细信息-https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-terms-query.html#query-dsl-terms-query - Russ Cam
我能否使用int代替List<int>来搜索数值? - zokkan
1
.Terms() 可以接受 IEnumerable<T> 或者 params T[],因此您可以传递任意数量的 T.Terms() - Russ Cam
@RussCam:将“toSearch”转换为字符串是必须的吗? - GMD
1
@gmd 不要,如果你有一个List<int>,则使用.Terms<int>(IEnumerable<int> terms) - Russ Cam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接