[英]java : Case insensitive search in Elasticsearch
我正在嘗試查找索引中的文檔,而不管索引中的字段值是小寫還是大寫。
這是我使用自定義分析器設計的索引結構。 我是分析儀的新手,我可能錯了。 看起來是這樣的:
POST arempris/emptagnames
{
"settings": {
"analyzer": {
"lowercase_keyword": {
"type": "custom",
"tokenizer": "keyword",
"filter": "lowercase"
}
}
},
"mappings" : {
"emptags":{
"properties": {
"employeeid": {
"type":"integer"
},
"tagName": {
"type": "text",
"fielddata": true,
"analyzer": "lowercase_keyword"
}
}
}
}
}
在Java后端中,我使用BoolQueryBuilder首先使用employeeids查找標記名。 這是我編寫的用於獲取值的代碼:
BoolQueryBuilder query = new BoolQueryBuilder();
query.must(new WildcardQueryBuilder("tagName", "*June*"));
query.must(new TermQueryBuilder("employeeid", 358));
SearchResponse response12 = esclient.prepareSearch(index).setTypes("emptagnames")
.setQuery(query)
.execute().actionGet();
SearchHit[] hits2 = response12.getHits().getHits();
System.out.println(hits2.length);
for (SearchHit hit : hits2) {
Map map = hit.getSource();
System.out.println((String) map.get("tagName"));
}
當我以小寫形式指定要搜索的標簽為“ june”時,它可以正常工作,但是在WildCardQueryBuilder中以大寫字母形式將其指定為“ June”時,我找不到任何匹配項。
讓我知道我在哪里犯了錯誤。 非常感謝您的幫助並提前致謝。
Elasticsearch有兩種查詢類型
全文查詢的規則是
因此,在這種情況下,您需要將查詢更改為此
BoolQueryBuilder query = new BoolQueryBuilder();
query.must(new QueryStringQueryBuilder("tagName:*June*"));
query.must(new TermQueryBuilder("employeeid", 358));
SearchResponse response12 = esclient.prepareSearch(index).setTypes("emptagnames")
.setQuery(query)
.execute().actionGet();
SearchHit[] hits2 = response12.getHits().getHits();
System.out.println(hits2.length);
for (SearchHit hit : hits2) {
Map map = hit.getSource();
System.out.println((String) map.get("tagName"));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.