C# 在EleasticSearch中搜索包含破折号和空格的子字符串
我有一个这样的模型:C# 在EleasticSearch中搜索包含破折号和空格的子字符串,c#,elasticsearch,nest,C#,elasticsearch,Nest,我有一个这样的模型: 公共类PersonModel { 公共Guid Id{get;set;} 公共PersonageType类型{get;set;} 公共字符串名称{get;set;} 公共字符串国家代码{get;set;} 公共字符串布尔secode{get;set;} } 我正在尝试实现一个查询,以筛选与每个属性的子字符串匹配的数据: var result=await ElasticClient.SearchAsync(sd=>sd .Index(索引名) .From((paginat
公共类PersonModel
{
公共Guid Id{get;set;}
公共PersonageType类型{get;set;}
公共字符串名称{get;set;}
公共字符串国家代码{get;set;}
公共字符串布尔secode{get;set;}
}
我正在尝试实现一个查询,以筛选与每个属性的子字符串匹配的数据:
var result=await ElasticClient.SearchAsync(sd=>sd
.Index(索引名)
.From((pagination.PageNumber-1)*pagination.PageSize)
.Size(分页.PageSize)
.Query(q=>
+q、 匹配(m=>m.Field(f=>f.Type).Query(typeValue))&&
+q、 通配符(w=>w.Field(f=>f.NationalCode).Value(NationalCode==null?null:$“*{NationalCode}*”)&&
+q、 通配符(w=>w.Field(f=>f.Name).Value(Name==null?null:$“*{Name}*”)&&
+q、 通配符(w=>w.Field(f=>f.BourseCode).Value(BourseCode==null?null:$“*{BourseCode}*”);
此查询工作正常,但当每个值都包含
-
或空白
时,将不会返回任何内容。例如,我有一个名字为john doe的人,当name
值为hn d
时,搜索查询不起作用。解决此问题的最简单方法是更改映射。
尝试以下方法:
PUT my-index-000001
{
"mappings": {
"properties": {
"NationalCode": {
"type": "keyword"
},
"Name": {
"type": "keyword"
},
"BourseCode": {
"type": "keyword"
},
}
}
}
PUT my-index-000001
{
"mappings": {
"properties": {
"NationalCode": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
然后重新编制数据索引
有关更多信息:
我认为您使用的是文本字段数据类型。此外,如果您想使用match query并享受其好处,您可以使用以下两种类型:
PUT my-index-000001
{
"mappings": {
"properties": {
"NationalCode": {
"type": "keyword"
},
"Name": {
"type": "keyword"
},
"BourseCode": {
"type": "keyword"
},
}
}
}
PUT my-index-000001
{
"mappings": {
"properties": {
"NationalCode": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
然后您可以对
NationalCode
使用匹配查询,对NationalCode使用通配符查询。关键字正如@hamid所说的关键字
修复了问题,我将查询改为:
var result=wait ElasticClient.SearchAsync(sd=>sd)
.Index(索引名)
.From((pagination.PageNumber-1)*pagination.PageSize)
.Size(分页.PageSize)
.Query(q=>
+q、 匹配(m=>m.Field(f=>f.Type).Query(typeValue))&&
+q、 通配符(w=>w.Field(f=>f.NationalCode.Suffix(“关键字”))).Value(NationalCode==null?null:$“*{NationalCode}*”)&&
+q、 通配符(w=>w.Field(f=>f.Name.Suffix(“关键字”)).Value(Name==null?null:$“*{Name}*”)&&
+q、 通配符(w=>w.Field(f=>f.BourseCode.Suffix(“关键字”)).Value(BourseCode==null?null:$“*{BourseCode}*”));
能否以JSON格式共享一些示例数据和预期的搜索结果?问题出在标准analyzer中,并且使用通配符查询(此问题的回答次数太多)。如果您坚持使用通配符查询,则应使用“关键字”映射类型。否则,请描述您想要做什么,以便我们可以帮助您重新设计映射和查询。@hamid如果您能给我发送一个解决此问题的链接,那就太好了。我只想在SQL Server中编写一个类似于%like%的查询,使用通配符对我来说没有什么区别