2015-11-19 352 views
2

任何人都可以请告诉我如何可以在elasticsearch中使用多个字段编写通配符查询我在这方面搜索了很多,但有人告诉我使用查询字符串或多个匹配,但在我的情况下问题是查询字符串不工作我我的代码下面给出了一个单场通配符查询,如果任何人都知道这事,请大家分享一些光在这ES中有多个字段的通配符查询?

"query": { 
     "wildcard" : { "places_area1.city.raw_wildcard" : last_wildcard_string } 
} 

UPDATE 映射

"settings": { 
     "index": { 
      "analysis": { 
      "analyzer": { 
       "synonym_wildcard": { 
       "tokenizer": "whitespace", 
       "filter": ["filter_wildcard"] 
       }, 
       "synonym_term": { 
       "tokenizer": "keyword", 
       "filter": ["filter_term"] 
       }, 
       "simple_wildcard": { 
       "tokenizer": "whitespace" 
       } 
      }, 
      "filter": { 
       "filter_term": { 
       "tokenizer": "keyword", // here you have to write this only for tokenizer keyword but not for whitespace 
       "type": "synonym", 
       "synonyms_path": "synonyms.txt", 
       }, 
       "filter_wildcard": { 
       "type": "synonym", 
       "synonyms_path": "synonyms.txt", 
       } 
      } 
      } 
     } 
     }, 
     mappings : { 
     places_area1: { 
      properties:{ 
      area1   : {"type" : "string", "index": "analyzed", "analyzer": "simple_wildcard"}, 
      city   : {"type" : "string", "fields": { 
       "raw": { 
       "type": "string", 
       "analyzer": "synonym_term" 
       }, 
       "raw_wildcard": { 
       "type": "string", 
       "analyzer": "synonym_wildcard" 
       } 
      } }, 
      } 
     } 
     } 
    } 

预先感谢您

+0

什么是您对字段映射你正在运行查询?你能告诉我们你想要像样本文件一样匹配吗? – ChintanShah25

+0

hey chintan你能帮我一个忙吗你知道如何在ES中编写带有多个字段的通配符查询? –

回答

4

你在找这样的事吗?

{ 
    "query": { 
    "query_string": { 
     "fields": ["title", "description", "state"], 
     "query": "Ban*", 
     "lowercase_expanded_terms": false 
    } 
    } 
} 

为什么你需要"lowercase_expanded_terms": false

由于您使用keywordwhitespace分词,字班加罗尔被收录为班加罗尔,同时使用query string wildcardBan*是小写的,因为它是默认设置,ES正在寻找开始禁令字,因此它找不到班加罗尔。你也可以通过添加lowercase过滤器来解决这个你mappings

而且它以前的工作,因为你没有指定任何analzyer并默认ES使用standard analzyer和内部使用

+0

嘿,所以对不起,我没有检查你以前的查询正确它让人感谢很多,但你能告诉我为什么我们必须写这个“lowercase_expanded_terms”:错? –

+0

也改变你对前一个答案,所以我可以接受:) –

+0

你是一个救世主人 –