03.full_text interval查询
文章目錄
- 1. intervals query 簡介
- 2. 樣例
- 3. match
- 4. all_of
- 5. any_of
- 6. filter
full text查詢就是基于分詞的查詢,有很多分類
intervals query intervals查詢: 全文查詢,可以對匹配項的順序和接近度進行細粒度控制。
match query匹配查詢: 用于執行全文查詢的標準查詢,包括模糊匹配和短語或接近查詢。
match_bool_prefix查詢: 創建一個布爾查詢,將與每個詞匹配的詞查詢作為詞查詢,但最后一個詞除外,后者作為前綴查詢匹配
match_phrase查詢: 類似于匹配查詢,但用于匹配精確短語或單詞接近匹配。
match_phrase_prefix查詢: 類似于match_phrase查詢,但是對最后一個單詞進行通配符搜索。
multi_match query多重匹配查詢: 匹配查詢的多字段版本。
common terms query 常用詞查詢: 一個更專業的查詢,它對不常見的單詞給予更多的偏愛。
query_string查詢: 支持緊湊的Lucene查詢字符串語法,允許您在單個查詢字符串中指定AND | OR | NOT條件和多字段搜索。僅限于專業用戶。
simple_query_string查詢: 適用于直接向用戶公開的query_string語法的更簡單,更可靠的版本。
1. intervals query 簡介
根據匹配項的順序和接近程度返回文檔。
intervals查詢使用匹配規則,該規則由一小組定義構成。然后將這些規則應用于指定字段中的term。
這些定義產生的最小intervals序列跨越了文本主體中的各個術語。這些intervals可以由父源進一步組合和過濾。
2. 樣例
下面的查詢會返回有"my favorite food hot water"或者"my favorite food cold porridge " 的docment
但是"when it’s cold my favorite food is porridge" 的doc則不會被召回
上面的my_text對應的是一個field的name,然后my_text的value就是一個查詢rule object,
這個rule object一共可以有四種類型
match
all_of
any_of
filter
3. match
match rule object的參數
query: (必需,字符串)希望在提供的中找到的文本。
max_gaps: (可選,整數)匹配項之間的最大位置數。除此以外的術語不視為匹配項。默認為-1。如果未指定或設置為-1,則對匹配沒有寬度限制。如果設置為0,則這些術語必須彼此相鄰。
ordered:(可選,布爾值)如果為true,則匹配詞必須以其指定順序出現。默認為false。
analyzer: (可選,字符串)分析器,用于分析查詢中的術語。默認為頂級的分析器。
filter: (可選,intervals過濾器規則對象)可選intervals過濾器。
use_field: (可選,字符串)如果指定,則匹配該字段而不是頂級的intervals。使用該字段中的搜索分析器分析術語。這樣,您就可以跨多個字段進行搜索,就好像它們都是同一字段一樣。例如,您可以將相同的文本編入詞干和未詞干字段中,并在未詞干的字段附近搜索詞干標記。
4. all_of
all_of規則返回匹配其他規則組合的匹配項。
intervals:(必需,規則對象數組)要組合的規則數組。所有規則都必須在文檔中產生匹配項,以使整個源匹配。
max_gaps: (可選,整數)匹配項之間的最大位置數。由規則產生的intervals比此intervals更遠將不視為匹配。默認為-1。如果未指定或設置為-1,則對匹配沒有寬度限制。如果設置為0,則這些術語必須彼此相鄰。
ordered: (可選,布爾值)如果為true,則規則所產生的intervals應按其指定的順序顯示。默認為false。
filter: (可選,intervals過濾器規則對象)用于過濾返回的intervals的規則。
5. any_of
any_of規則返回其任何子規則產生的interval。
intervals:(必需,規則對象數組)要匹配的規則數組。
filter: (可選,intervals過濾器規則對象)用于過濾返回的intervals的規則。
6. filter
過濾器規則基于查詢返回intervals。有關示例,請參見過濾器示例。
after:(可選,查詢對象)查詢用于返回遵循過濾規則intervals的intervals。
before: (可選,查詢對象)查詢用于返回在過濾規則的intervals之前發生的intervals。
contains_by: (可選,查詢對象)用于返回過濾規則中某個intervals所包含的intervals的查詢。
containing:(可選,查詢對象)用于返回包含來自過濾規則的intervals的intervals的查詢。
not_contained_by: (可選,查詢對象)查詢用于返回過濾規則中某個intervals未包含的intervals。
not_contain:(可選,查詢對象)用于返回不包含來自過濾規則的intervals的intervals的查詢。
not_overlapping: (可選,查詢對象)查詢用于返回與過濾規則的intervals不重疊的intervals。
overlapping: (可選,查詢對象)查詢用于返回與過濾規則中的intervals重疊的intervals。
script: (可選,腳本對象)用于返回匹配文檔的腳本。該腳本必須返回布爾值true或false。有關示例,請參見腳本過濾器。
樣例
POST _search {"query": {"intervals" : {"my_text" : {"match" : {"query" : "hot porridge","max_gaps" : 10,"filter" : {"not_containing" : {"match" : {"query" : "salty"}}}}}}} } POST _search {"query": {"intervals" : {"my_text" : {"match" : {"query" : "hot porridge","filter" : {"script" : {"source" : "interval.start > 10 && interval.end < 20 && interval.gaps == 0"}}}}}} }intervals查詢始終將intervals最小化,以確保查詢可以線性運行。有時這可能會導致令人驚訝的結果,尤其是在使用max_gaps限制或過濾器時。例如,采用以下查詢,
則擁有"hot porridge is salty porridge" 的字段的doc不會被返回,因為contained_by只會返回他命中的那一部分,在這里,只會命中"hot porridge is salty porridge" 前面兩個單詞,那么salt就沒有辦法匹配了
總結
以上是生活随笔為你收集整理的03.full_text interval查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 01.query的分类-条件查询和组合查
- 下一篇: 02.组合查询