所以我有一个对象,其ID字段由Guid填充。我正在使用“必须”子句进行Elasticsearch查询,以匹配该字段中的特定ID。问题是elasticsearch返回的结果与我提供的Guid完全不匹配。我注意到我正在提供的Guid,Elasticsearch返回的结果之一在Guid的特定部分共享相同的数字。
这是我的查询源(我正在使用Elasticsearch控制台):
{
query:
{
bool:
{
must: [
{
text:
{
couchbaseDocument.doc.Id: 5cd1cde9-1adc-4886-a463-7c8fa7966f26
}
}]
must_not: [ ]
should: [ ]
}
}
from: 0
size: 10
sort: [ ]
facets: { }
}
Run Code Online (Sandbox Code Playgroud)
它返回两个结果。编号为
5cd1cde9-1adc-4886-a463-7c8fa7966f26
Run Code Online (Sandbox Code Playgroud)
另一个ID为
34de3d35-5a27-4886-95e8-a2d6dcf253c2
Run Code Online (Sandbox Code Playgroud)
如您所见,它们都有相同的中间术语“ -4886-”。但是,我希望该查询仅在记录完全匹配而不是部分匹配时才返回记录。我在这里做错了什么?
该查询是(可能)正确的。
您几乎可以肯定看到的是“标准分析器”的工作,默认情况下在索引时间使用它。该分析器将在连字符('-')和其他字符中标记输入(将其分割为术语)。这就是找到匹配项的原因。
为了解决这个问题,您想将couchbaseDocument.doc.Id字段设置为not_analyzed
请参阅:如何在ElasticSearch中不进行分析?以及从那里到官方文档的链接。
映射将类似于:
{
"yourType" : {
"properties" : {
"couchbaseDocument.doc.Id" : {"type" : "string", "index" : "not_analyzed"},
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |