用于从 mongodb 数据 C# 中搜索消除空格的弹性查询
Elastic query to search eliminating spaces from mongodb data C#
我想知道是否有办法搜索 MongoDB 数据,但不包括 space。我的 MongoDB 有这样的数据 -
"Element":"Ele1"
"Element":"Ele2"
"Element":"Ele 3"
我的搜索查询包含不包括 space 的字符串,即 "Ele1,Ele2,Ele3"。因此,当我将 "Ele3" 传递给我的搜索查询时,它不会 return 任何结果。我正在使用 ElasticSearch.net nuget。我的代码是这样的 -
var elResp = await data.MultiSearchAsync(m => m
.Query(q => q
.Nested(n => n
.Path("Element")
.Query(qq => qq
.Bool(b => b
.Must(m1 => m1
.Term("Element.keyword", "Ele1")))))))
有什么我可以做的,或者我必须在 MongoDb 中创建一个额外的字段来保存没有 space 的元素值。所以我可以从中进行检查。谢谢
您可以通过创建不带空格的额外字段来获得最佳性能,但是在 MongoDB 中,您可以只使用 $regex 来匹配带空格和不带空格的两个字段。
db.collection.find({ "Element": { $regex: /Ele\s*3/ } })
其中 \s
是一个空格,*
表示零次或多次出现。您预测的空格越多,您就越应该考虑添加一个没有任何空格的字段(因为性能),但 /E\s*l\s*e\s*3/
仍然适用于这种情况。
我想知道是否有办法搜索 MongoDB 数据,但不包括 space。我的 MongoDB 有这样的数据 -
"Element":"Ele1"
"Element":"Ele2"
"Element":"Ele 3"
我的搜索查询包含不包括 space 的字符串,即 "Ele1,Ele2,Ele3"。因此,当我将 "Ele3" 传递给我的搜索查询时,它不会 return 任何结果。我正在使用 ElasticSearch.net nuget。我的代码是这样的 -
var elResp = await data.MultiSearchAsync(m => m
.Query(q => q
.Nested(n => n
.Path("Element")
.Query(qq => qq
.Bool(b => b
.Must(m1 => m1
.Term("Element.keyword", "Ele1")))))))
有什么我可以做的,或者我必须在 MongoDb 中创建一个额外的字段来保存没有 space 的元素值。所以我可以从中进行检查。谢谢
您可以通过创建不带空格的额外字段来获得最佳性能,但是在 MongoDB 中,您可以只使用 $regex 来匹配带空格和不带空格的两个字段。
db.collection.find({ "Element": { $regex: /Ele\s*3/ } })
其中 \s
是一个空格,*
表示零次或多次出现。您预测的空格越多,您就越应该考虑添加一个没有任何空格的字段(因为性能),但 /E\s*l\s*e\s*3/
仍然适用于这种情况。