簡體   English   中英

如何使用 Java 中的 QueryBuilder 從 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM