我的索引具有以下映射。
{
"mappings": {
"properties": {
"author": {
"type": "text"
},
"book_name": {
"type": "keyword"
}
}
}
}
以下是被索引的文档。
[
{
"author": "Conan Doyale",
"book_name": "Sherlock Holmes"
},
{
"author": "Arabian Nights",
"book_name": "Arabian Night"
},
{
"author": "Bride and Prejeduice",
"book_name": "Gurnindher Chadda"
},
{
"author": "Pride and Prejeduice",
"book_name": "Jane Austen"
},
{
"author": "Ashwin Sanghi",
"book_name": "Krishna Key"
},
{
"author": "Ashwin Sanghi",
"book_name": "Krishna lock"
},
{
"author": "Arabian Night",
"book_name": "Arabian Night"
}
]
现在,如果我使用fieldname.keyword查询作者字段,则不会返回结果。
{
"query": {
"match": {
"author.keyword": "Arabian Night"
}
}
}
我的理解是它将返回以下文档
{
"author": "Arabian Night",
"book_name": "Arabian Night"
}
此外,以下术语查询也未返回任何结果。 我希望能得到同样的结果。
{
"query": {
"term": {
"author": "Arabian"
}
}
}
答案 0 :(得分:0)
如果我使用fieldname.keyword查询作者字段,则不会 返回结果。
发生这种情况是因为名为keyword
的子字段不存在。为了使上述工作有效,映射应为:
{
"mappings": {
"properties": {
"author": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"book_name": {
"type": "keyword"
}
}
}
}
因此,更新您的映射并再次为文档重新编制索引。
此外,以下术语查询也未返回任何结果。我会 希望得到相同的结果。
在术语查询中,您正在查询类型为author
的字段text
。默认情况下,text
类型字段使用standard analyzer。因此,Arabian Night
将被索引为两个术语arabian
和night
。请注意,以防万一。标准分析器在索引时将所有术语的大小写更改为小写。因此,字词查询将不匹配Arabian
,但将匹配arabian
。因此,以下字词查询将起作用:
{
"query": {
"term": {
"author": "arabian"
}
}
}