这个问题是基于之前的帖子,其中“” Match或“”都无法进行“精确搜索” MatchPhrasePrefix。
Match
MatchPhrasePrefix
然后,我在这里找到了类似的帖子,其中在映射定义中将搜索字段设置为not_analyzed(通过@Russ Cam)。
但是我正在使用
package id="Elasticsearch.Net" version="7.6.0" targetFramework="net461" package id="NEST" version="7.6.0" targetFramework="net461"
可能是因为该原因该解决方案无法正常工作。
因为如果我通过“ SOME”,它将与“SOME”和“SOMEOTHERLOAN”相匹配,但情况并非如此(在我先前的文章中为“ productvalue”)。
如何使用NEST 7.6.0做同样的事情?
好吧,我不知道您当前的映射看起来如何。我也不太了解NEST,但我会解释
如何使Elastic Engine理解将不分析字段以进行精确匹配?
以使用弹性dsl为例。
对于完全匹配(区分大小写),您要做的就是将字段类型定义为keyword。对于类型为字段keyword的数据,无需应用任何分析器即可对其进行索引,因此非常适合精确匹配。
keyword
PUT test { "mappings": { "properties": { "field1": { "type": "keyword" } } } }
现在让索引一些文档
POST test/_doc/1 { "field1":"SOME" } POST test/_doc/2 { "field1": "SOME OTHER LOAN" }
为了精确匹配,我们可以使用术语查询。让我们搜索“ SOME”,我们应该得到文档1。
GET test/_search { "query": { "term": { "field1": "SOME" } } }
我们得到的O / P:
{ "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 0.6931472, "hits" : [ { "_index" : "test", "_type" : "_doc", "_id" : "1", "_score" : 0.6931472, "_source" : { "field1" : "SOME" } } ] } }
因此,关键是使字段类型成为keyword和使用term查询。
term