ElasticSearch 使用 Nest 7.2.1 在 C# ASP.Net 中添加条件子搜索



如何将以下SQL查询转换为嵌套代码以搜索主要包含2列的弹性搜索索引 1.类别 2.COMPANY_NAME ?

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();

好吧,我使用linq-fluent(如果你没有dataobject,你将不得不交换(。 我假设您的数据索引正确(没有关键字...

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 
)
)
));

最新更新