![](/img/trans.png)
[英]Construct QueryBuilder from JSON DSL when using Java API in ElasticSearch?
[英]How to get value with an underscore inside a string from Elasticsearch using QueryBuilder in Java?
我正在使用 Elasticsearch 3.2.7 和 ElasticsearchRepository.search(),它以 QueryBuilder 作為參數( doc )
我有一個 BoolQueryBuilder 並像這樣使用它:
boolQuery.must(termQuery("myObject.code", value);
var results = searchRepository.search(boolQuery);
字段code
的定義如下:
"myObject": {
"properties": {
"code": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
問題是,當我使用內部帶有下划線的值進行搜索時,例如: FOO_BAR
則它不會返回任何結果。 當我搜索具有前導或尾隨下划線的其他值時,就可以了。
我讀過 ES 可能會忽略特殊字符並將其內部的單詞分開,因此需要進行精確匹配搜索。 但我也讀到keyword
設置保證了這一點。 所以現在我很困惑。
是的,您是對的,使用keyword
字段可以實現完全匹配,您需要使用以下查詢
boolQuery.must(termQuery("myObject.code.keyword", value); --> note addition of keyword
var results = searchRepository.search(boolQuery);
您可以使用分析 API查看索引文檔和搜索詞的標記,並且基本上您在索引中的標記必須與搜索詞標記匹配,以便 ES 返回匹配:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.