我正在为一个对象创建一个索引,并且希望能够同时进行完整的短语搜索和部分匹配。该类型称为“deponent”,简化的索引创建如下所示:
{
"deponent": {
"properties": {
"name": {
"type": "multi_field",
"fields": {
"name": {
"type": "string"
},
"full": {
"type": "string",
"index": "not_analyzed",
"omit_norms": true,
"index_options": "docs",
"include_in_all": false
}
}
}
}
}
}
这样做的目的是对“name”字段中的值进行两次索引:一次是字段中的单个单词没有被分解(name.full),一次是单词被分解(name.name)。
我有一个已被索引的文档,其名称字段设置为“Danny Watson 博士”。我希望在执行术语查询时会发生以下行为(根据文档未分析其查询字符串):
- 使用“Danny Watson 博士” 搜索name.full时,应返回记录
- 使用“Watson”搜索name.full时,不应返回记录
- 使用“Danny Watson 博士”搜索name.name时,不应返回记录
- 使用 "Watson"搜索name.name时,应返回记录
以上四点的查询:
1 - 按预期工作(返回记录)
{
"query" : {
"term": {
"name.full": {
"value": "Dr. Danny Watson"
}
}
}
}
2 - 按预期工作(不返回记录)
{
"query" : {
"term": {
"name.full": {
"value": "Watson"
}
}
}
}
3 - 按预期工作(不返回记录)
{
"query" : {
"term": {
"name.name": {
"value": "Dr. Danny Watson"
}
}
}
}
4 - 不按预期工作 - 不返回记录
{
"query" : {
"term": {
"name.name": {
"value": "Watson"
}
}
}
}
所以看来我对某事的理解是有缺陷的。我错过了什么?