弹性搜索,根据部分值查找文档

时间:2016-05-01 15:11:27

标签: elasticsearch

我的文档包含以下字段:

Sender: Bootstrapper.ScheduleJob.Runner

运行此查询时,我收到了结果:

GET _search 
{
    "query": {
        "query_string": {
            "query": "Bootstrapper.ScheduleJob.Runner"
        }
    }
}

但是当我试图搜索这样的部分值时,我没有得到任何结果:

GET _search 
{
    "query": {
        "query_string": {
            "query": "*strapper.Schedule*"
        }
    }
}

这是我索引的映射:

{
   "logstash-2016.05.01": {
      "mappings": {
         "redis": {
            "properties": {
               "@timestamp": {
                  "type": "date",
                  "format": "dateOptionalTime"
               },
               "sender": {
                  "type": "string",
                  "index": "not_analyzed"
               }
            }
         }
      }
   }
}

我知道通配符查询不能很好地扩展到大量数据,但在这种情况下,我们将拥有有限数量的数据,并且它不会影响任何用户体验,因为它用于可视化ELK堆栈中的日志。然后Sender字段可以包含许多不同的值,因此需要通配符查询。

任何想法或可能是另一种方法?

编辑:我使用的是Elastic Search 1.6.0的旧版本。它可以与此有关吗?

EDIT2:这实际上会返回文档,但我正在寻找_all的查询或查询,您可以在其中指定多个字段:

GET /logstash-2016.05.01/redis/_search
{
    "query": {
        "wildcard": {
            "sender": "*strapper.Schedule*" 
        }
    }
}

EDIT3:

运行此查询:

GET /logstash-2016.05.01/_search { "query": { "query_string": { "query": "Bootstrapper.ScheduleJob.Runner" } } }  

给予:

{
   "error": "ElasticsearchIllegalArgumentException[No feature for name [_search { \"query\": { \"query_string\": { \"query\": \"Bootstrapper.ScheduleJob.Runner\" } } }]]",
   "status": 400
}

这个得到与上面相同的结果:

GET /logstash-2016.05.01/_search { 
    "query": { "query_string": { "query": "*strapper.Schedule*" } } }

0 个答案:

没有答案