Lucene查询语法详解
Lucene查詢
Lucene查詢語法以可讀的方式書寫,然后使用JavaCC進行詞法轉換,轉換成機器可識別的查詢。
下面著重介紹下Lucene支持的查詢:
Terms詞語查詢
詞語搜索,支持 單詞 和 語句。
- 單詞,例如:"test","hello"
- 語句,例如:"hello,world!"
多個詞語可以通過操作符,連接成更復雜的搜索邏輯。
Field字段查詢
Lucene支持針對某個字段進行搜索,語法如:
title:hello 或者 title:"hello title"搜索語句時需要加上雙引號,否則:
title:hello title 就意味著,搜索title為hello,或者包含title關鍵字的文檔Term Modifier修飾符查詢
Lucene支持對詞語增加修飾,從而擴大查詢的范圍。
WildCard Searches通配符查詢
支持在單個單詞或者語句中添加通配符:
- ?匹配單個字符
- *匹配0個或多個字符
例如:
=>想要搜索test或者textte?t=>想要搜索test tests testertest*文檔中不支持通配符放在搜索的開頭,如*test,但是在kibana中是支持這種搜索語法的。
Fuzzy Searches模糊詞查詢
支持搜索模糊詞,如果想要搜索模糊詞,需要在詞語后面加上符號~
例如:
=>想要搜索和test相近的詞test~可以搜索出text或者tests等詞也支持在~后面添加模糊系數,模糊系數[0-1],越靠近1表示越相近,默認模糊系數為0.5。
test~0.8Proximity Searches鄰近詞查詢
前面的模糊詞只是針對某個單詞,在語句間也存在模糊搜索的概念,只不過不是單詞的模糊,而是單詞之間內容的模糊。
注意要使用雙引號`""`包圍
例如:
=>想要搜索包含"hello""world"的文檔,這兩個單詞中間可以有一部分內容(這部分內容通過字符個數限制)"hello world"~10可以匹配"hello 123 world" 或者"hello,Tom,world"Range Searches范圍查詢
支持范圍搜索,可以指定最小值和最大值,會自動查找在這之間的文檔。如果是單詞,則會按照字典順序搜索。
- {}尖括號表示不包含最小值和最大值,可以單獨使用
- []方括號表示包含最小值和最大值,可以單獨使用
例如:
=>搜索成績grade字段小于等于80分,大于60分的grade:{60,80]=>搜索名字在A和C之間的name:{A,C}返回,bone、baby、barryBoosting a Term詞語相關度查詢
如果單詞的匹配度很高,一個文檔中或者一個字段中可以匹配多次,那么可以提升該詞的相關度。使用符號^提高相關度。
例如:
=>提高jarkarta的比重 jakarta apache可以采用下面的語法:
jakarta^4 apacheBoolean Operator布爾操作符
支持多種操作符:
AND
AND操作符用于連接兩個搜索條件,僅當兩個搜索條件都滿足時,才認為匹配。通常用來做交集操作。也可以使用&&替換。
注意必須使用大寫。如果不使用AND,而是and,可能會被單做關鍵詞進行搜索!
例如:
=> 搜索同時包含tom和john的文檔tom AND john 或者 tom && johnOR
OR操作符用于連接兩個搜索條件,當其中一個條件滿足時,就認為匹配。通常用來做并集操作。也可以使用||替換。
注意必須使用大寫。
例如:
=>搜索包含tom或者john的文檔tom OR john 或者 tom || johnNOT
NOT操作符排除某個搜索條件。通常用來做差集操作也可以使用!替換。
注意必須大寫。
例如:
=>搜索包含tom,不包含john的文檔tom NOT john 或者 tom && !john在kibana中支持單獨使用,如:
=>排除包含test的文檔NOT test+
包含該操作符后跟著的搜索條件,如:
=>搜索包含tom的文檔+tom作用于AND的差不多,但是支持單獨使用
-
排除該操作符后跟著的搜索條件,如:
=>搜索不包含tom的文檔-tom效果類似NOT
Grouping分組
支持使用小括號對每個子句進行分組,形成更為復雜的查詢邏輯。
例如:
=>要搜索包含hello的文檔中,也包含tom或者john的hello AND (tom OR john)也支持在字段中使用小括號:
=>要搜索標題中,既包含return 也包含pink panther的title:(+return +"pink panther")Escaping Special Character轉義字符
由于Lucene中支持很多的符號,如
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \因此如果需要搜索 (1+1):2 需要對改串進行轉換,使用字符\。
\(1\+1\)\:2轉載于:https://www.cnblogs.com/xing901022/p/4974977.html
總結
以上是生活随笔為你收集整理的Lucene查询语法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android点击事件(click bu
- 下一篇: 在VisualState状态里更改Gri