部分字符串搜索以及AWS Elastic Search中的多个Word

时间:2018-01-25 13:28:01

标签: amazon-web-services elasticsearch

我已经开始使用AWS弹性搜索服务,我想在部分字符串搜索和多字搜索中搜索JSON数组对象。

例如,我已在数组中添加了三个对象。

 [{
  "_id" : "1",
  "TitleKeywords" : "Game of thrones"
},
{
  "_id" : "2",
  "TitleKeywords" : "Baywatch"
},
{
  "_id" : "3",
  "TitleKeywords" : "Spider Man"
}]

现在我想对字段名称TitleKeywords执行搜索,我想搜索部分字也搜索多个单词。

例如,如果我想搜索“Spi”字符,那么它应该会导致我进入JSON对象下面。

{
 "_id" : "3",
 "TitleKeywords" : "Spider Man"
}

我搜索了此查询语法,并在以下查询中找到:

query: {
            query_string: {
                default_field: "TitleKeywords",
                query: "*Spi*"
         }
     }

此外,对于搜索关键字'Spider M'(这是一个多字搜索),它应该会导致我进入JSON对象下面:

{
 "_id" : "3",
 "TitleKeywords" : "Spider Man"
}

现在,如果我想搜索多个单词,那么我可以使用以下查询:

query: {
 match: {
         "TitleKeywords": {
            "query":    "Spider M",
            "operator": "and"
          }
       }
     }

我希望我的结果是两个查询的混合,这会导致对多个单词进行部分字符串搜索。

有人可以帮我吗?

由于

1 个答案:

答案 0 :(得分:0)

我认为您应该考虑将multi-fieldsNGram Tokenizer结合使用。

所以你要向你的"TitleKeywords"添加ngram字段并以这种方式查询:

query: {
  match: {
    "TitleKeywords.ngram": {
      "query"   : "Spider M",
      "operator": "and"
    }
  }
}

但是来自1个字符的NGram可能无效,所以我不确定这是否符合您的需求。