ES 如何得到像mysql 中 like 一樣的搜尋結果

Jokenzhang發表於2020-12-18

ES 如何得到像mysql 中 like 一樣的搜尋結果

用過ES的都知道,他搜尋的時候會進行分詞和全文搜尋。
但是想要搜尋結果和mysql 的 like一樣怎麼設定呢,下面我就以php語言來說明一下,希望能夠幫助你。

#其實也是非常的簡單的
$body = [
                "query" => [
                    "bool" => [
                        "must" => [
                            [
                                "match" => [   
									//如果是分詞下面這樣寫 分詞舉個例子:用中國人去搜尋,結果會有帶中的,帶中國的,帶人的,結果特別的多。
									//"title" => $keywords,
									#想要像mysql的like那樣,按照下面這樣寫,例如:中國人去搜尋,標題裡面有中國人連續三個字的會搜尋出來。
                                    "title" => [
                                        "query" => $keywords,
                                        "operator" => "and"
                                    ],
                                    #如果想要完全匹配按照下面這樣寫,例如搜尋中國人,標題必須是中國人三個字的才會搜尋出來。
                                    //"title.keyword" => $keywords,
                                ]
                            ]
                        ],
                        "must_not" => [],
                        "should" => [

            ],
                    ],
                ],
                "sort" => [
                "_score" => [ //這裡是先按照平分進行排序
                    "order" => 'desc'
                ],
                "title.keyword" => [ //你的任意欄位進行排序
                    "order" => $param['title_order'] ?? 'desc'
                ],
            ],
                "track_total_hits" => true,  // 解除10000條資料的查詢限制
                "from" => $from,
                "size" => $size,
            ];

相關文章