c# - ElasticSearch 在 ASP.Net C# 中使用 Nest 7.2.1 添加条件子搜索
问题描述
如何将以下 SQL 查询转换为嵌套代码以搜索主要包含 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();
解决方案
好吧,我使用 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
)
)
));
推荐阅读
- javascript - 仅对子 div 应用悬停效果,而不影响具有相同班级的父母
- sass - 使用 BEM 重写扩展导航栏(因此所有元素都具有相同的特异性)
- reactjs - 错误 419(未知状态)React-js Laravel8
- ios - 来自统一问题的 xcode Admob
- node.js - 防止上传的图片被删除
- java - 处理扫描仪的Java类问题
- java - 我可以在父类中使用一个 Enum 作为 DiscriminatorType 和 Column 吗?
- java - Activity-Fragment 方法通信
- reactjs - 当用户停止输入时验证输入 - ReactJs
- weblogic - 手动部署ear文件时Weblogic出错