在文本字段上进行弹性搜索关键字搜索不会返回结果

时间:2019-12-23 02:10:56

标签: elasticsearch

我的索引具有以下映射。

    {
  "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"
    }
  }
}

1 个答案:

答案 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将被索引为两个术语arabiannight。请注意,以防万一。标准分析器在索引时将所有术语的大小写更改为小写。因此,字词查询将不匹配Arabian,但将匹配arabian。因此,以下字词查询将起作用:

{
  "query": {
    "term": {
      "author": "arabian"
    }
  }
}