Elasticsearch嵌套搜索多个字段值

时间:2015-12-04 14:49:15

标签: elasticsearch nest

我在我的页面中将搜索和聚合结合起来。

当从不同的组合并时,聚合工作正常,但是当我从同一组中选择多个聚合时,聚合工作不正常。

例如...如果我在默认页面上显示2个聚合,则说明

aggA(1000) aggB(400)

正确选择aggA会显示1000个结果......并且aggB将相应地减少到50

然而,当我点击一个aggB而不是获得预期的50个结果时我得到400 ...因此我的搜索结果没有合并2个搜索查询值,而只是作用于我的列表中传递给elasticsearch的最后一个

我的代码:

objESResults = client.Search<ESContent>(s => s
        .Query(a =>
        {
            return
            a.Match(m => m.OnField("_all").Query(m_strSearchQuery).Operator(Operator.And))                
            && a.TermsDescriptor(t => t.OnField(f => f.ContentType).Terms(m_lstSelectedContentType))
            && a.TermsDescriptor(t => t.OnField(f => f.Sectors).Terms(m_lstSelectedSector))
            && a.TermsDescriptor(t => t.OnField(f => f.Companies).Terms(m_lstSelectedCompany))
            && a.TermsDescriptor(t => t.OnField(f => f.ContentRegions).Terms(m_lstSelectedContentRegion))
            && a.TermsDescriptor(t => t.OnField(f => f.Author).Terms(m_lstSelectedAuthor))
            && a.TermsDescriptor(t => t.OnField(f => f.Country).Terms(m_lstSelectedCountry))
            && a.TermsDescriptor(t => t.OnField(f => f.Columns).Terms(m_lstSelectedColumns))
            && a.Range(t => t.OnField(f => f.EntryDate).GreaterOrEquals(DateFrom));
        }

m_lstSelectedSector将包含aggA和aggB的值,但是有一些方法可以使弹性搜索对它们执行AND而不是仅搜索列表中的最后一个值。 ?

1 个答案:

答案 0 :(得分:0)

通过向每个查询添加.minimumshouldmatch(100%)来解决此问题。