所以我有一个带有Id字段的对象,该字段由Guid填充。我正在使用" Must"进行弹性搜索查询。子句匹配该字段中的特定Id。问题是,弹性搜索返回的结果与Guid I提供的结果完全不符。我注意到我提供的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: { }
}
它返回了两个结果。 ID为
的人5cd1cde9-1adc-4886-a463-7c8fa7966f26
和ID为
的另一个34de3d35-5a27-4886-95e8-a2d6dcf253c2
正如你所看到的,他们都有相同的中期和#34; -4886 - "。但是,如果记录完全匹配,而不是部分匹配,我希望此查询仅返回记录。我在这里做错了什么?
答案 0 :(得分:4)
查询(可能)正确。
您几乎可以肯定看到的是'Standard Analyzer`的工作,它在索引时默认使用。此分析器将在连字符(' - ')和其他字符之间对输入(将其拆分为术语)进行标记。这就是找到匹配的原因。
要解决此问题,您需要将couchbaseDocument.doc.Id
字段设置为not_analyzed
请参阅:How to not-analyze in ElasticSearch?以及从那里到官方文档的链接。
映射将类似于:
{
"yourType" : {
"properties" : {
"couchbaseDocument.doc.Id" : {"type" : "string", "index" : "not_analyzed"},
}
}
}