我在elasticsearch的query_string中使用通配符時遇到了問題。我找不到query_string中 "escape "屬性的檔案,當其值為 "true "時,我得到了一些結果,但當其值為 "false "時,結果為0.
。{
"query_string": {
"query": "*Serial *"。
"欄位": [
"info.name^1.0"
],
"型別": "best_fields",
"allow_leading_wildcard": true,
"analyze_wildcard": true,
"轉義": true,
"auto_generate_synonyms_phrase_query": true,
"fuzzy_transpositions": true,
"提升": 1.0
}
}
有人能解釋一下 "escape "屬性嗎?
uj5u.com熱心網友回復:
奇怪的是,它沒有被記錄下來,但看一下源代碼,我們可以看到:
Es查詢字串源代碼如果 "escape "是 "true",代碼會呼叫 org.apache.lucene.queryparser.classic.QueryParser.escape
在查詢字串上,該函式本身被記錄為
回傳一個字串,其中 QueryParser 希望被轉義的那些字符被前面的 . 轉義了。所以看起來這個標志只是用來為你自動轉義字符,所以你不需要手動轉義它們
。uj5u.com熱心網友回復:
查看QueryStringQueryBuilder.java(Github)的源代碼,我們發現
public class QueryStringQueryBuilder extends AbstractQueryBuilder< QueryStringQueryBuilder> {
// ...
public static final boolean DEFAULT_ESCAPE = false;
//span> ...
private boolean escape = DEFAULT_ESCAPE;
/ ...
public QueryStringQueryBuilder(StreamInput in) throwsIOException {
// ...
escape = in.readBoolean()。
/ ...
}
// ... }。
保護的查詢 doToQuery(SearchExecutionContext context) throwsIOException {
String rewrittenQueryString = escape ? org.apache.lucene.queryparser.classic.QueryParser.escape(this.queryString) : queryString。
// ...。
}
}
所以它決定了查詢字串是否通過Lucene 經典QueryParser的.escape()方法傳遞。
如果你想使用Lucene的查詢語言而不是KQL,這個引數似乎是相關的。它可能是 Kibana 基于 Web 的查詢界面的一個輔助引數,您可以在兩種方言之間進行切換。
總的來說--如果它沒有被記錄下來,那么它可能不適合于公開使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/315187.html
標籤:
下一篇:為什么C 程式會輸出這個值?
