1. 程式人生 > >Elasticsearch-對一個field進行多值全文字搜尋

Elasticsearch-對一個field進行多值全文字搜尋

新增測試資料:

POST /forum/article/_bulk
{ "update": { "_id": "1"} }
{ "doc" : {"title" : "this is java and elasticsearch blog"} }
{ "update": { "_id": "2"} }
{ "doc" : {"title" : "this is java blog"} }
{ "update": { "_id": "3"} }
{ "doc" : {"title" : "this is elasticsearch blog"} }
{ "update": { "_id": "4
"} } { "doc" : {"title" : "this is java, elasticsearch, hadoop blog"} } { "update": { "_id": "5"} } { "doc" : {"title" : "this is spark blog"} }
  • 搜尋title中包含java或者elasticsearch的doc,這個不是之前的term搜尋,而是full text的全文檢索:
GET /forum/article/_search
{
  "query": {
    "match": {
      "title": "java elasticsearch"
} } }
  • 如果我們想搜尋即包含java也包含elasticsearch的doc,那麼我們可以執行:
GET /forum/article/_search
{
  "query": {
    "match": {
      "title": {
        "query": "java elasticsearch",
        "operator": "and"
      }
    }
  }
}
  • 如果我們想搜尋包含java,elasticsearch,spark,hadoop中至少3條的結果:
GET /forum/article/_search
{
  "query"
: { "match": { "title": { "query": "java elasticsearch hadoop spark", "minimum_should_match":"75%" } } } }

如果使用bool可以用以下搜尋條件,should預設是可以一個都不匹配:

GET /forum/article/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": "java"
          }
        },
        {
          "match": {
            "title": "elasticsearch"
          }
        },
        {
          "match": {
            "title": "hadoop"
          }
        },
        {
          "match": {
            "title": "spark"
          }
        }
      ],
      "minimum_should_match": 3
    }
  }
}

實際上,使用諸如上面的match query進行多值搜尋的時候,es底層會自動將這個match query轉換成bool的語法

例如:

{
  "query": {
    "match": {
      "title": "java elasticsearch"
    }
  }
}

會轉換成:

GET /forum/article/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "title": {
              "value": "java"
            }
          }
        },
        {
          "term": {
            "title": {
              "value": "elasticsearch"
            }
          }
        }
      ]
    }
  }
}

需要注意關鍵的一步是,兩者之間唯一不同的是match使用了對搜尋引數分詞的處理,如果直接使用term將不會對搜尋引數進行分詞處理

相關推薦

Elasticsearch-一個field進行文字搜尋

新增測試資料: POST /forum/article/_bulk { "update": { "_id": "1"} } { "doc" : {"title" : "this is java a

Java--如何使用執行緒一個HashSet進行平行計算

這段時間工作比較忙。今天抽空整理了一個多執行緒使用場景。 當處理一個數據量比較大的集合時(每個元素的計算都耗時比較長)。由於只使用一個執行緒進行計算比較慢。所以想到多跑幾個執行緒進行處理。 1.每個執行緒可以自行計算要處理集合的開始和結束索引,確保每一個元素都被計算的到。

oracle一個表的行資料進行修改

1、第一種使用迴圈修改表 --遍歷一個表並作修改 declare bl varchar(100); --宣告一個字串變數 BEGIN FOR L_RECORD IN (select * from ys

linux 個使用者一個檔案進行操作 檔案鎖和路複用

①如果多個使用者對一個檔案進行操作的時候,如何解決,考慮用檔案鎖的形式和多路複用形式;1)檔案鎖找到一個函式flock()對檔案進行加鎖解鎖等操作,就是在使用前對檔案進行上鎖,在使用後對檔案進行解鎖,

Linux下個程序或執行緒同時一個檔案進行寫操作

標頭檔案 #include<sys/file.h> 定義函式 int flock(int fd,int operation); 函式說明 flock()會依引數operation所指定的方式對引數fd所指的檔案做各種鎖定或解除鎖定的動作。此函式只能鎖定整個檔案,無法鎖定檔案的某一區域。 引數ope

Confluence 6 一個空間進行歸檔後產生的影響

空間 如果一個空間被歸檔: 將不會在查詢結果中顯示,除非你選擇 在歸檔空間中查詢(Search archived spaces)。如果沒有歸檔空間的話,這個功能是隱藏的。 頁面和內容將不會在 Confluence 的內容 快速查詢(quick search)中顯示,這個被用

tensorflow 怎麼一個tensor進行所有元素相加求和

tensor 和 numpy不同。 使用np.sum對一個tensor求和是不能得到一個標量的。 所以需要使用tensorflow自帶的函式對tensor進行求和。 總的來說,這裡我們需要明白一點,tensor資料使用tensorflow的函式運算,否則會出錯。 這裡僅給出對一個

在mySQl中,SQL語言允許使用萬用字元進行字串匹配的操作,其中“%”不能表示()。A.0個字元B.一個字元C.個字元D.搜尋關鍵字中包含字元“%”

加粗樣式@TOC 歡迎使用Markdown編輯器 你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Markdown的基本語法知識。 新的改變 我們對Markdown編輯

採用動態代理的方式一個進行增強

建立一個介面 package com.itheima.proxy; /* * 服務員的介面 */ public interface Waiter { public void server(); public String say

L1-040. 最佳情侶身高差【附C++如何保留幾位小數,可設定為一個物件或個物件生效】

專家通過多組情侶研究資料發現,最佳的情侶身高差遵循著一個公式:(女方的身高)×1.09=(男方的身高)。如果符合,你倆的身高差不管是牽手、擁抱、接吻,都是最和諧的差度。下面就請你寫個程式,為任意一位使用者計算他/她的情侶的最佳身高。輸入格式:輸入第一行給出正整數N(<=

Django:使用filter的pk進行查詢

由於想要做收藏夾的功能,所以希望能夠一次性查詢出所有id的物件,檢視文件,找到了如下方法 pk是primary key的縮寫,顧名思義pk_in就是primary key在某一個範圍內,具體操作(以自

C++ 建立類的時候類成員進行,建立類並且以引用的方式賦,引用的方式在建構函式賦

類的實現方式:  class TestClass { public: //建構函式 TestClass(QString &str_01, QString &str_02

java編程一個可以 進行個選擇題測驗成績(從高到低依次輸出學生下標和成績(可以重復))

answer 學生 pre sys har b數 swe 另一個 統計 成績可重復,從高到低輸出,不會重復輸出 public class GradeExam { public static void main(String[] args) {

MySQL文字搜尋 擴充套件搜尋 布林搜尋 FULLTEXT

總結: 全文字搜尋Match(FULLTEXT) Against(‘text’)。注意FULLTEXT索引要在導完資料後再定義FULLTEXT是哪(些)列,否則很耗時。 全文字搜尋結果輸出會按相關性排列。 擴充套件查詢Against(‘text’ WITH QUERY

MYSQL學習筆記(十四)使用文字搜尋

1.啟用全文字搜尋支援 在CREATE TABLE語句建立表時,使用FULLTEXT;也可在稍後指定(所有已有資料必須立即索引) 2.進行全文字搜尋 SELECT —— FROM —— WHERE Match(——) Against(‘——’); Match指示針對指定的列

記錄一個python裏面很神奇的操作,一個包含列表的元組進行增量賦,成功賦但還報錯

png code error peer 列表 mage pictures 但是 stack 記錄一個python裏面很神奇的操作 今天記錄一個很神奇的操作。關於序列的增量賦值。如果你很熟悉增量賦值,你也不妨看下去,我想說的是有關於增量賦值和元組之間一種神奇的操作。來自 《流

一個給定的二維數組按照指定的鍵進行排序

arr pre des ray cti lse 指定 key _array public function set_s(){ $arr = [ [‘one‘ => 6,‘two‘ => 19], [‘one‘ => 36,

實現一個能夠錶達式進行的控制檯程式

我這個專案的碼雲地址是https://gitee.com/wangzhiming/personal_project41678.git 下邊這張表格記錄了我預期做這個專案的時間和實際上消耗的時間,看得出來我寫的速度還是趕不上我希望的速度,我的繼續努力!!! PSP2.1

SQL 用個條件進行排序;以及根據一個條件的進行排序

1、先說第一個用多個條件進行排序      ORDER BY name,age       (多條件排序,還有條件可以再加在後面)      ORDER BY name desc,age&nb

C語言:利用指標編寫程式,定義一個3行3列的二維陣列,並在程式中進行,陣列元素的型別不限,輸出該二維陣列以及各行的均值

題目來源:大工慕課 連結 作者:Caleb Sung 題目要求 利用指標編寫程式,定義一個3行3列的二維陣列,並在程式中對其進行賦值,陣列元素的型別不限,輸出該二維陣列以及各行的均值,各行