matchAllQuery
使用方法:創建一個查詢,匹配所有文檔。
示例:QueryBuilders.matchAllQuery()
注意事項:這種查詢不加任何條件,會返回索引中的所有文檔,可能會影響性能,特別是文檔數量很多時。
matchQuery
使用方法:對指定字段執行全文搜索查詢。
示例:QueryBuilders.matchQuery(“fieldName”, “text to search”)
注意事項:默認會對文本進行分詞處理,然后進行搜索。
multiMatchQuery
使用方法:允許你在多個字段上執行匹配查詢。
示例:QueryBuilders.multiMatchQuery(“text tosearch”, “fieldName1”, “fieldName2”)
注意事項:適用于需要在不同字段上搜索相同文本的情況。
termQuery
使用方法:對指定字段執行精確匹配查詢。
示例:QueryBuilders.termQuery(“fieldName”, “value”)
注意事項:不會對字段值進行分詞。
termsQuery
使用方法:允許指定多個精確值進行匹配查詢。
示例:QueryBuilders.termsQuery(“fieldName”,“value1”, “value2”)
注意事項:不會對字段值進行分詞,適用于字段值完全匹配其中一個查詢值的情況。
rangeQuery
使用方法:對指定字段執行范圍查詢。
示例:QueryBuilders.rangeQuery(“fieldName”).from(“startValue”).to(“endValue”)
注意事項:可以設置范圍的起始和結束值,適用于數值、日期等類型的字段。
wildcardQuery
使用方法:執行通配符查詢,支持*(任意字符序列)和?(單個字符)。
示例:QueryBuilders.wildcardQuery(“fieldName”, “text*”)
注意事項:可能會影響性能,尤其是通配符在前面時。
fuzzyQuery
使用方法:對指定字段執行模糊查詢。
示例:QueryBuilders.fuzzyQuery(“fieldName”, “text”)
注意事項:基于Levenshtein編輯距離進行匹配,可以設置模糊程度。
boolQuery
使用方法:組合多個查詢條件,支持must(必須匹配)、should(至少匹配一個)、must_not(不能匹配)和filter(過濾)。
示例:QueryBuilders.boolQuery().must(QueryBuilders.termQuery(“fieldName”,“value”))
注意事項:是構建復雜查詢邏輯的基礎,性能比filter更優。
nestedQuery
使用方法:查詢嵌套對象。
示例:QueryBuilders.nestedQuery(“path”,QueryBuilders.termQuery(“path.fieldName”, “value”), ScoreMode.Avg)
注意事項:path是嵌套對象的路徑,必須使用nested類型定義嵌套對象字段。
NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery("nested_field",
QueryBuilders.matchQuery("nested_field.property", "value"), ScoreMode.None);
prefixQuery
使用方法:搜索具有指定前綴的文檔。
示例:QueryBuilders.prefixQuery(“fieldName”, “prefix”)
注意事項:對性能影響較大,特別是前綴較短時。
regexpQuery
使用方法:使用正則表達式進行查詢。
示例:QueryBuilders.regexpQuery(“fieldName”, “regexp”)
注意事項:復雜的正則表達式可能會嚴重影響性能。
disMaxQuery
使用方法:對子查詢的結果做并集,但只用得分最高的那個子查詢的得分作為最終得分。
示例:QueryBuilders.disMaxQuery().add(QueryBuilders.termQuery(“fieldName”,
“value1”)).add(QueryBuilders.termQuery(“fieldName”, “value2”))
注意事項:用于處理多個字段上的查詢并想要每個字段上的查詢獨立計分。
matchPhraseQuery
使用方法:搜索與指定短語匹配的文檔,考慮短語的完整性和順序。
示例:QueryBuilders.matchPhraseQuery(“fieldName”, “phrase”)
注意事項:對于精確的短語搜索非常有用。
matchPhrasePrefixQuery
使用方法:類似于matchPhraseQuery,但是對最后一個詞允許前綴匹配。
示例:QueryBuilders.matchPhrasePrefixQuery(“fieldName”, “phrase prefix”)
注意事項:適用于自動補全或容錯的場景。
geoDistanceQuery
使用方法:根據地理位置和指定距離搜索文檔。
示例:QueryBuilders.geoDistanceQuery(“location”).point(lat,
lon).distance(“12km”) 注意事項:確保字段正確映射為地理位置類型。
geoBoundingBoxQuery
使用方法:在指定的地理坐標范圍內搜索文檔。
示例:QueryBuilders.geoBoundingBoxQuery(“location”).setCorners(northLat,
westLon, southLat, eastLon)
注意事項:用于地理位置范圍搜索。
geoPolygonQuery
使用方法:在指定的多邊形內搜索文檔。 示例:QueryBuilders.geoPolygonQuery(“location”,
Arrays.asList(new GeoPoint(lat1, lon1), new GeoPoint(lat2, lon2),
…))
注意事項:性能可能會隨多邊形頂點的增加而降低。
existsQuery
使用方法:搜索指定字段有值的文檔(不為null或不存在)。
示例:QueryBuilders.existsQuery(“fieldName”)
注意事項:用于找出指定字段有值的文檔。
idsQuery
使用方法:根據文檔ID搜索文檔。
示例:QueryBuilders.idsQuery().addIds(“1”, “2”, “3”)
注意事項:直接通過ID快速檢索文檔。
queryStringQuery
使用方法:允許用戶使用查詢語句字符串(支持Lucene查詢語法)進行復雜查詢。
示例:QueryBuilders.queryStringQuery(“+java -python”)
注意事項:非常靈活,但需要用戶了解查詢語法。不當的查詢語句可能會影響性能或結果準確性。
simpleQueryStringQuery
使用方法:提供一個更簡單、更寬松的查詢字符串語法和解析。
示例:QueryBuilders.simpleQueryStringQuery(“java python”)
注意事項:比queryStringQuery更安全,避免復雜語法導致的錯誤,但功能也相對受限。
boostingQuery
使用方法:組合兩個查詢,提升第一個查詢的結果,降低第二個查詢的結果。
示例:QueryBuilders.boostingQuery(QueryBuilders.termQuery(“field”,
“value1”), QueryBuilders.termQuery(“field”, “value2”)).negativeBoost(0.2f)
注意事項:用于突出重要結果,同時保留其他相關結果。
constantScoreQuery
使用方法:對過濾查詢的結果賦予一個常數分數。
示例:QueryBuilders.constantScoreQuery(QueryBuilders.termQuery(“field”, “value”)).boost(2.0f)
注意事項:適用于只關心匹配與否,不關心匹配程度(得分)的場景。
functionScoreQuery
使用方法:允許修改查詢得分,通過一系列函數來調整。
示例:QueryBuilders.functionScoreQuery(QueryBuilders.matchQuery(“field”,
“value”), ScoreFunctionBuilders.weightFactorFunction(2))
注意事項:提供了極高的靈活性,可以根據文檔的屬性計算得分。
scriptQuery
使用方法:使用腳本來指定文檔是否匹配。
示例:QueryBuilders.scriptQuery(new Script(“doc[‘field’].value > 5”))
注意事項:靈活但復雜,性能可能受腳本執行效率影響。
geoShapeQuery
使用方法:基于地理形狀進行查詢。
示例:QueryBuilders.geoShapeQuery(“locationField”,
ShapeBuilders.newEnvelope(new Coordinate(-30, 50), new Coordinate(30, -50)))
注意事項:需要地理形狀字段正確映射,用于復雜的地理空間查詢。
wildcardQuery
使用方法:允許使用通配符進行模糊匹配。
示例:QueryBuilders.wildcardQuery(“field”, “text*”)
注意事項:可能影響性能,特別是以通配符開始的模式。
regexpQuery
使用方法:基于正則表達式進行查詢。
示例:QueryBuilders.regexpQuery(“fieldName”, “regexp”)
注意事項:功能強大但可能影響性能,使用時需要謹慎。
termsLookupQuery
使用方法:使用另一個文檔的值作為本次查詢的條件。
示例:QueryBuilders.termsLookupQuery(“fieldName”, new TermsLookup(“index”, “id”, “path”))
注意事項:允許動態從其他文檔中獲取查詢條件,增加查詢靈活性。
termQuery
使用方法:查找字段中完全匹配指定值的文檔。
示例:QueryBuilders.termQuery(“fieldName”, value);
注意事項:適用于不需要分詞的字段,如枚舉、狀態碼等。
fuzzyQuery
使用方法:基于Levenshtein距離進行模糊匹配,找到與指定值相似的文檔。
示例:QueryBuilders.fuzzyQuery(“fieldName”, “text”)
注意事項:可以調整最大編輯距離參數,但過大的距離可能會降低查詢性能。
prefixQuery
使用方法:查找字段值具有指定前綴的文檔。
示例:QueryBuilders.prefixQuery(“fieldName”,“prefix”)
注意事項:對于大型數據集,前綴過短可能會影響查詢性能。
wildcardQuery
使用方法:使用通配符進行查詢,*表示任意字符序列,?表示任意單個字符。
示例:QueryBuilders.wildcardQuery("fieldName", "*pattern?")
注意事項:與prefixQuery類似,可能影響性能,謹慎使用特別是在模式的開頭使用*或?。
idsQuery
使用方法:根據文檔ID查找文檔。
示例:QueryBuilders.idsQuery().addIds(“1”, “2”, “3”)
注意事項:快速直接通過ID檢索文檔,但對于大規模的ID查詢,性能可能受影響。
rangeQuery
使用方法:在指定字段上執行范圍查詢,找出字段值落在指定區間內的文檔。
示例:QueryBuilders.rangeQuery(“fieldName”).from(start).to(end)
注意事項:支持字符串、數字及日期類型,對于日期類型需要確保字段格式正確。
matchQuery
使用方法:在全文字段上執行全文檢索。
示例:QueryBuilders.matchQuery(“fieldName”, “text to search”)
注意事項:默認對查詢文本進行分詞,然后搜索分詞結果。
matchPhraseQuery
使用方法:查找與指定短語匹配的文檔,考慮詞條順序。
示例:QueryBuilders.matchPhraseQuery(“fieldName”, “phrase to match”)
注意事項:適用于需要精確匹配短語的場景,對于短語中的每個詞條,位置必須嚴格匹配。
matchPhrasePrefixQuery
使用方法:短語前綴查詢,與matchPhraseQuery相似,但是對最后一個詞允許前綴匹配。
示例:QueryBuilders.matchPhrasePrefixQuery(“fieldName”, “phrase prefix”)
注意事項:適用于自動補全場景,但對于長文本或高頻詞可能影響性能。
scriptQuery
使用方法:使用腳本條件進行查詢。
示例:QueryBuilders.scriptQuery(new Script(“doc[‘field’].value > 5”))
注意事項:靈活但需要注意腳本性能和安全問題,不當的腳本可能導致性能下降或安全風險。
geoDistanceQuery
使用方法:查找位于某個地理位置指定距離內的文檔。
示例:QueryBuilders.geoDistanceQuery(“location”).point(lat, lon).distance(“200km”)
注意事項:確保使用的字段是geo-point類型。這種查詢適合于地理位置搜索場景。
geoBoundingBoxQuery
使用方法:查找位于指定地理矩形框內的文檔。
示例:QueryBuilders.geoBoundingBoxQuery(“location”).setCorners(topLeft, bottomRight)
注意事項:同樣需要字段是geo-point類型。這種查詢適用于用戶指定一個地理區域范圍進行搜索。
geoPolygonQuery(已棄用)
使用方法:查找位于指定多邊形內的文檔。 示例:QueryBuilders.geoPolygonQuery(“location”,
points)
注意事項:由于性能原因,這個查詢在較新版本的Elasticsearch中已被棄用。建議使用geo-shape查詢代替。
existsQuery
使用方法:查找指定字段有值的文檔。
示例:QueryBuilders.existsQuery(“fieldName”)
注意事項:這個查詢用于找出指定字段非空的文檔。非常適用于過濾出某個字段一定存在的文檔。
idsQuery
使用方法:根據文檔ID查找文檔。
示例:QueryBuilders.idsQuery().addIds(“1”, “2”, “3”)
注意事項:這是一種非常直接的查詢方式,通過指定文檔ID來快速檢索文檔。
wrapperQuery
使用方法:使用JSON字符串表示的原生Elasticsearch查詢DSL。
示例:QueryBuilders.wrapperQuery(“{“term”: {“field”:“value”}}”)
注意事項:允許直接使用JSON格式的查詢字符串,這使得可以直接復用Elasticsearch的原生查詢DSL進行查詢。
matchBoolPrefixQuery
使用方法:創建一個匹配查詢,該查詢首先將文本分析為詞條,然后為每個詞條搜索,對于最后一個詞條使用前綴匹配。
示例:QueryBuilders.matchBoolPrefixQuery(“fieldName”, “text to search”)
注意事項:這種查詢結合了布爾查詢和前綴查詢的特性,適用于自動補全和搜索建議場景。
typeQuery(已棄用)
使用方法:基于文檔類型進行查詢。
示例:QueryBuilders.typeQuery(“typeName”)
注意事項:自Elasticsearch
6.x以后,官方不推薦使用多類型,并在7.x版本中完全移除了類型概念。因此,這個查詢在最新版本的Elasticsearch中不再適用。
moreLikeThisQuery
使用方法:查找與給定文本或文檔相似的文檔。
示例:QueryBuilders.moreLikeThisQuery(new String[]{“fieldName”}, new String[]{“text”}, null)
注意事項:可以基于一段文本、一組文檔或二者結合來查找相似文檔。適用于實現“查找相似內容”的功能。
regexpQuery
使用方法:使用正則表達式進行查詢,以匹配符合正則表達式的文檔。
示例:QueryBuilders.regexpQuery(“fieldName”, “regexp”)
注意事項:雖然強大,但復雜的正則表達式可能會影響查詢性能。謹慎使用。
spanTermQuery
使用方法:創建一個span查詢,匹配包含指定詞條的文檔。
示例:QueryBuilders.spanTermQuery(“fieldName”, “value”)
注意事項:Span查詢是低級查詢,適用于執行復雜的跨度查詢,如找到鄰近的、有序的詞條。
spanNearQuery
使用方法:查找所有與指定的span查詢匹配且彼此之間距離滿足指定條件的文檔。
示例:QueryBuilders.spanNearQuery(QueryBuilders.spanTermQuery(“field”,
“value1”), 12).addClause(QueryBuilders.spanTermQuery(“field”, “value2”))
注意事項:用于處理詞條的位置和順序敏感的復雜查詢。
spanFirstQuery
使用方法:查找所有在文檔開頭一定范圍內匹配指定span查詢的文檔。
示例:QueryBuilders.spanFirstQuery(QueryBuilders.spanTermQuery(“field”, “value”), 3)
注意事項:適用于只關心文檔開頭部分的查詢場景。
geoShapeQuery
使用方法:基于地理形狀進行查詢,查找與指定地理形狀相關的文檔。
示例:QueryBuilders.geoShapeQuery(“locationField”, shapeBuilder)
注意事項:需要確保字段被映射為geo_shape類型。這種查詢適用于復雜的地理空間搜索。
scriptScoreQuery
使用方法:使用腳本來計算查詢的得分。
示例:QueryBuilders.scriptScoreQuery(QueryBuilders.matchAllQuery(), new
Script(ScriptType.INLINE, “painless”, “Math.random()”, Collections.emptyMap()))
注意事項:提供了通過腳本自定義得分邏輯的靈活性,但需要注意腳本的性能和安全性。
percolateQuery
使用方法:執行percolate查詢,查找與指定文檔匹配的查詢。
示例:QueryBuilders.percolateQuery(“queryField”, docBuilder)
注意事項:用于實現反向搜索的場景,即將文檔作為查詢條件來匹配存儲的查詢。
hasChildQuery
使用方法:查找與至少一個滿足指定查詢條件的子文檔相關聯的父文檔。
示例:QueryBuilders.hasChildQuery(“child_type”,
QueryBuilders.termQuery(“field”, “value”), ScoreMode.Avg)
注意事項:適用于父子關聯數據模型。需要在映射時定義好父子關系。
hasParentQuery
使用方法:查找至少有一個父文檔滿足指定查詢條件的子文檔。
示例:QueryBuilders.hasParentQuery(“parent_type”,
QueryBuilders.termQuery(“field”, “value”), false)
注意事項:與hasChildQuery相對,用于查詢子文檔基于父文檔的條件。
parent_id
使用方法:直接通過父文檔的ID來查找子文檔。
示例:QueryBuilders.parentId(“parent_type”, “parent_id”)
注意事項:需要在映射時定義好父子關系。
adjacencyMatrixQuery
使用方法:基于多個關聯文檔間的關系,構建復雜的圖查詢。
示例:通常涉及構建多個查詢條件,較為復雜,需要根據具體使用場景構建。
注意事項:適用于處理復雜的關系網絡,如社交網絡分析。
rankFeatureQuery和rankFeaturesQuery
使用方法:利用rank_feature或rank_features字段類型來影響文檔的排名。
示例:QueryBuilders.rankFeatureQuery(“feature”,ScoreFunction.saturation())
注意事項:適用于那些需要根據某些打分特征來排序的搜索場景。
matchNoneQuery
使用方法:不匹配任何文檔的查詢。
示例:QueryBuilders.matchNoneQuery()
注意事項:這種查詢可以在某些需要排除所有文檔的特定邏輯中使用。
shapeQuery
使用方法:基于形狀的地理空間查詢。
示例:QueryBuilders.geoShapeQuery(“fieldName”, shapeBuilder)
注意事項:類似于 geoShapeQuery,但專注于更復雜的形狀匹配,適用于需要高級地理空間分析的場景。
combinedFieldsQuery
使用方法:結合多個字段進行全文搜索查詢,提供跨字段的相關性評分。
示例:QueryBuilders.combinedFieldsQuery(“text”).field(“field1”).field(“field2”)
注意事項:適用于當文本可能跨多個字段時的搜索場景,幫助提升相關性評分的準確性。