【问题标题】:ElasticSearch Adding Conditional Sub Search in ASP.Net C# using Nest 7.2.1ElasticSearch 在 ASP.Net C# 中使用 Nest 7.2.1 添加条件子搜索
【发布时间】:2019-09-11 10:17:12
【问题描述】:

如何将以下 SQL Query 转换为 Nest Code 以搜索主要包含 2 列 1. CATEGORY 2. COMPANY_NAME 的 Elastic Search 索引?

SELECT * FROM dbo.Table 
WHERE 
COMPANY_NAME LIKE '%DATALIGENCE%' AND (CATEGORY LIKE 'A%' OR CATEGORY LIKE 'B%')

下面是我的 NEST 代码,它在没有类别条件的情况下可以正常工作:-

prefixText = {"prefixText":"DATALIGENCE","count":25}


                QueryContainer query = new MatchQuery
                {
                    //Field = Field<RawData>(p => p.company_name),
                    Analyzer = "standard",
                    Boost = 1.1,
                    Name = "named_query",
                    Field = "company_name",
                    //CutoffFrequency = 0.001,
                    Query = prefixText,
                    Fuzziness = Fuzziness.Auto,
                    //Fuzziness = Fuzziness.AutoLength(3, 6),
                    FuzzyTranspositions = true,
                    //MinimumShouldMatch = 1,
                    //FuzzyRewrite = MultiTermQueryRewrite.TopTermsBlendedFreqs(10),
                    Lenient = true,
                    //Operator = Operator.Or,
                    AutoGenerateSynonymsPhraseQuery = false
                    //MinimumShouldMatch = 50
                };

                var searchRequest = new SearchRequest("companylistindex")
                {
                    Query = query,
                    Size = 10,
                    MinScore = 1,
                    Sort = new List<ISort>
                        {
                        new FieldSort { Field = "_score", Order = Nest.SortOrder.Descending }
                        }
                    //Sort(sort => sort.OnField("_score").Descending())
                    //Sort = SortSpecialField.Score
                    //Sort = SortSpecialField.Score
                };
                var searchResults = client.Search<RawData>(searchRequest);
                //var jsonResult = JsonConvert.SerializeObject("{\"result\":true\"}");
                List<RawData> lstData = new List<RawData>();
                lstData = searchResults.Documents.ToList();

【问题讨论】:

    标签: c# asp.net elasticsearch nest


    【解决方案1】:

    好吧,我使用 linq-fluent(如果您没有数据对象,则必须交换)。 我假设您的数据是正确的索引(没有关键字...)

    QueryContainer filterContainer = null;
                filterContainer &= Query<yourtype>.QueryString(q
                        => q.Query("DATALIGENCE").Fields(f => f.Field(fi => fi.company_name)));
    
                filterContainer &= Query<yourtype>.Bool(b => b.Should(
                            bs => bs.Prefix(p => p.CATEGORY , "A", rewrite: (MultiTermQueryRewrite)null),
                            bs => bs.Prefix(p => p.CATEGORY , "B", rewrite: (MultiTermQueryRewrite)null)
                            )
                    );
    
    Client.Search<yourtype>(s => s
                .Query(q => q.Bool(b => b.Must(m => filterContainer 
                    )
                )
                ));
    

    【讨论】:

    • 感谢您的回复...我尝试了上述方法,但它给了我错误...错误 21 无法将 lambda 表达式转换为类型“Nest.QueryContainer”,因为它不是委托类型跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多