如何使用术语查询在此数组中进行搜索?
How can I use a Term Query to search within this array?
我有一个索引,我的文档的某些属性可以是数组值 ID,即
POST temp/_doc
{
"test": ["5T8QLHIBB_kDC9Ugho68","5T8QLHIBB_kDC9Ugho69"]
}
现在,当我想搜索包含某个 ID 的文档时,term query 像这样:
POST temp/_search
{
"query": {
"term": {
"test": "5T8QLHIBB_kDC9Ugho68"
}
}
}
没有结果。如果我尝试使用更简单的值(例如“foo”和“bar”而不是 ID),它会起作用。我该如何解决?
在这种情况下,指示 Elasticsearch 使用字段的关键字部分有效:
POST temp/_search
{
"query": {
"term": {
"test.keyword": "5T8QLHIBB_kDC9Ugho68"
}
}
}
一击。
我本可以通过像这样预先指定映射来避免这种情况,而不是让 Elasticsearch 根据我发布的文档来猜测它;默认情况下,它将使用文本字段而不是关键字。
POST temp/_mapping
{
"properties": {
"test": {
"type": "keyword"
}
}
}
我想在您的回答中补充一点,字符串 hey
和 5T8QLHIBB_kDC9Ugho68
之间没有 'complexity' 区别——它们得到的分析是一样的。
至于一开始可能会混淆的数组方面——在 ES 中有 no dedicated array
数据类型。您应该将数组值的映射定义为字符串(或关键字)。
旁注:建议不要在一个特定数组中混合使用不同的类型——但您可以使用 ["5T8QLHIBB_kDC9Ugho68", "5T8QLHIBB_kDC9Ugho69"]
我有一个索引,我的文档的某些属性可以是数组值 ID,即
POST temp/_doc
{
"test": ["5T8QLHIBB_kDC9Ugho68","5T8QLHIBB_kDC9Ugho69"]
}
现在,当我想搜索包含某个 ID 的文档时,term query 像这样:
POST temp/_search
{
"query": {
"term": {
"test": "5T8QLHIBB_kDC9Ugho68"
}
}
}
没有结果。如果我尝试使用更简单的值(例如“foo”和“bar”而不是 ID),它会起作用。我该如何解决?
在这种情况下,指示 Elasticsearch 使用字段的关键字部分有效:
POST temp/_search
{
"query": {
"term": {
"test.keyword": "5T8QLHIBB_kDC9Ugho68"
}
}
}
一击。
我本可以通过像这样预先指定映射来避免这种情况,而不是让 Elasticsearch 根据我发布的文档来猜测它;默认情况下,它将使用文本字段而不是关键字。
POST temp/_mapping
{
"properties": {
"test": {
"type": "keyword"
}
}
}
我想在您的回答中补充一点,字符串 hey
和 5T8QLHIBB_kDC9Ugho68
之间没有 'complexity' 区别——它们得到的分析是一样的。
至于一开始可能会混淆的数组方面——在 ES 中有 no dedicated array
数据类型。您应该将数组值的映射定义为字符串(或关键字)。
旁注:建议不要在一个特定数组中混合使用不同的类型——但您可以使用 ["5T8QLHIBB_kDC9Ugho68", "5T8QLHIBB_kDC9Ugho69"]