如何根据我的映射和使用关键字查询弹性搜索?

Paw*_*iak 6 elasticsearch

我有一个非常简单的映射,看起来像这样(我简化了示例):

{
    "location" : {
        "properties": {
            "name": { "type": "string", "boost": 2.0, "analyzer": "snowball" },
            "description": { "type": "string", "analyzer": "snowball" }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我使用一些基于真实英语单词的随机值来索引很多位置.

我希望能够在名称或描述字段中搜索与任何给定关键字匹配的位置(名称更重要,因此我给予了提升).我尝试了几个不同的查询,但没有返回任何结果.

{
    "fields" : ["name", "description"],
    "query" : {
        "terms" : {
            "name" : ["savage"],
            "description" : ["savage"]
        },
        "from" : 0,
        "size" : 500
    }
}
Run Code Online (Sandbox Code Playgroud)

考虑到存在具有单词位置猛烈抨击它应该给我一些结果(说明野蛮是干猛烈抨击).使用上述查询得到0结果.我一直在使用curl来查询ES:

curl -XGET -d @query.json http://localhost:9200/myindex/locations/_search
Run Code Online (Sandbox Code Playgroud)

如果我改为使用查询字符串:

curl -XGET http://localhost:9200/fieldtripfinder/locations/_search?q=description:savage
Run Code Online (Sandbox Code Playgroud)

我实际上得到了一个结果(当然现在只搜索描述字段).

基本上我正在寻找一个查询,它将使用多个关键字进行OR类搜索,并将它们与名称和描述字段中的值进行比较.

imo*_*tov 6

雪球将"野蛮"变成了"野蛮",这就是为什么"野蛮"这个词并没有带来任何结果.但是,当您在URL上指定"savage"时,它会被分析并获得结果.根据您的意图,您可以使用正确的词干("savag")或使用"匹配"查询而不是"词条"来分析您的词语:

{
  "fields" : ["name", "description"],
  "query" : {
    "bool" : {
      "should" : [
        {"match" : {"name" : "savage"}},
        {"match" : {"description" : "savage"}}
      ]
    },
    "from" : 0,
    "size" : 500
  }
}
Run Code Online (Sandbox Code Playgroud)