如何让 Elastic Engine 理解一个字段不被分析为完全匹配?
How to make Elastic Engine understand a field is not to be analyzed for an exact match?
问题基于 ,其中基于 Match
或 MatchPhrasePrefix
的精确搜索不起作用。
然后我发现了一种类似的post ,其中搜索字段在映射定义中设置为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" 和 "SOME OTHER LOAN" 匹配,而这不应该是这种情况(在我之前的 post 中 "product value" ).
如何使用 NEST 7.6.0 执行相同的操作?
嗯,我不知道您当前的映射是什么样子。我也不知道 NEST,但我会解释
How to make Elastic Engine understand a field is not to be analyzed for an exact match?
通过使用弹性 dsl 的示例。
对于完全匹配(区分大小写),您需要做的就是将字段类型定义为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
查询。
问题基于 Match
或 MatchPhrasePrefix
的精确搜索不起作用。
然后我发现了一种类似的post
但我正在使用
package id="Elasticsearch.Net" version="7.6.0" targetFramework="net461"
package id="NEST" version="7.6.0" targetFramework="net461"
可能是因为这个原因,解决方案不起作用。
因为如果我传递 "SOME",它会与 "SOME" 和 "SOME OTHER LOAN" 匹配,而这不应该是这种情况(在我之前的 post 中 "product value" ).
如何使用 NEST 7.6.0 执行相同的操作?
嗯,我不知道您当前的映射是什么样子。我也不知道 NEST,但我会解释
How to make Elastic Engine understand a field is not to be analyzed for an exact match?
通过使用弹性 dsl 的示例。
对于完全匹配(区分大小写),您需要做的就是将字段类型定义为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
查询。