我是新的ElasticSearch。最近我们开始在我的项目中使用ElasticSearch。 我试图通过使用match_query来获取基于first_name和last_name的数据。 我写这样的查询
{
"query":{
"multi_match" : {
"query": "michkel",
"fields": [ "last_name"]
}
}
}
我的索引名称是员工,它包含以下文档
{
"first_name":"smith",
"last_name":"michkel",
"age":25,
"doj":"2015-05-2"
},
{
"first_name":"john",
"last_name":"smith",
"age":46,
"doj":"1989-03-25"
}
当运行上面的查询时我得到了总记录,但我的要求是如果我给出“查询”:“michkel”这样,那么只有一条记录与我的文档匹配。 尽快给我解决方案 还有一个问题 我想根据用户给定的日期进行搜索。我的用户将给出这样的日期,如1989-04-15。为此我写如下 { “查询”:{ “ 请求参数” : { “查询”:“1989-04-15”,
}
}
}
{"error":"SearchPhaseExecutionException[Failed to execute phase [query_fetch], all shards failed; shardFailures {[du1Tb7U8QLWSnXO2m9ATCg][employee][0]: SearchParseException[[employee][0]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\n\"query\":{\n \" query_string\" : {\n \"query\": \"1989-04-15\",\n\n }\n}\n}]]]; nested: QueryParsingException[[employee] No query registered for [ query_string]]; }]","status":400}
答案 0 :(得分:1)
而不是multi_match
使用bool过滤器,如下所示:
{
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"match": {
"last_name": "michkel"
}
}
]
}
}
}
}
}
根据您编辑过的问题,您应该在匹配替换中使用与"doj": "1989-04-15"
相同的内容,并且如果您想查找同时更换last_name
和doj
,请使用以下查询:
{
"query": {
"filtered": {
"query": {
"bool": {
"should": [
{
"query_string": {
"query": "1989-04-15"
}
}
],
"must": [
{
"match": {
"last_name": "michkel"
}
}
]
}
}
}
}
}