0

我对Elasticsearch 中的查询字符串查询有疑问。我在这里写了一个 Sense 代码来复制它。

POST myindex
POST myindex/mytype
    {
        "name":"t-shirt",
        "season": "2016-3"
    }

我搜索:

POST myindex/_search
{
    "query": {
        "query_string": {
           "query": "2016-*",
           "fields": ["name", "season"]
        }
    }
}

或者:

POST myindex/_search
{
    "query": {
        "query_string": {
           "query": "t-shirt*"
        }
    }
}

这些查询不返回任何文档(但它应该返回索引文档),我不知道如何修复它。

我希望尽可能通用,因为这是一个示例,但我的文档有很多字段,用户可以搜索他想要的内容,而不受语法限制。

4

3 回答 3

0

name字段已被标准分析器分析并产生了两个标记,即tshirt您可以通过以下_analyze查询看到

curl -XGET localhost:9200/test/_analyze?pretty -d 't-shirt'
{
  "tokens" : [ {
    "token" : "t",
    "start_offset" : 0,
    "end_offset" : 1,
    "type" : "<ALPHANUM>",
    "position" : 0
  }, {
    "token" : "shirt",
    "start_offset" : 2,
    "end_offset" : 7,
    "type" : "<ALPHANUM>",
    "position" : 1
  } ]
}

相反,你可以搜索shirt*,你会得到一些结果

POST myindex/_search
{
    "query": {
        "query_string": {
           "query": "shirt*"
        }
    }
}
于 2016-03-21T13:05:21.427 回答
0

尝试通配符查询

POST myindex/_search
{
  "query": {
    "wildcard": {
      "season": {
        "value": "2016-*"
      }
    }
  }
}
于 2016-03-22T07:11:32.757 回答
0

我使用"analyze_wildcard": true(默认为 false)并且解决了在同一查询中使用 - 和 * 搜索时返回零文档的问题。

"fields": ["_all"]注意:(或未指定)和指定所有字段及其名称(例如)之间存在不同的行为"fields": ["name", "season"]。在我最完整的测试中,我尝试了它。

于 2016-03-23T14:17:41.193 回答