日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

第87篇ES之Elastica-php匹配多值字段及给Problem的elementName设中文分词ik

發布時間:2023/12/14 php 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第87篇ES之Elastica-php匹配多值字段及给Problem的elementName设中文分词ik 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關鍵詞:Elastica-php匹配多值字段, ProblemelementName設中文分詞ik

一、Elastica-php匹配多值字段

1.1 實現了匹配選項

1參考如下:

https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/_search_operations.html

a.)標準的黑窗口查詢如下:

curl -XGET'localhost:9200/my_index/my_type/_search' -d '{

???"query" : {

???????"match" : {

???????????"testField" : "abc"

???????}

??? }

}'

b.)對應的php客戶端的偽代碼如下:

$params = [

???'index' => 'my_index',

???'type' => 'my_type',

???'body' => [

???????'query' => [

???????????'match' => [

??????????????? 'testField' => 'abc'

???????????]

???????]

??? ]

];

$results = $client->search($params);

分析:

$params = [

???'index' => 'my_index',

???'type' => 'my_type',

???'body' => [

???????'query' => [

???????????'match' => [

??????????????? 'testField' => 'abc'

???????????]

???????]

??? ]

];

print_r(json_encode($params['body']));

{"query":{"match":{"testField":"abc"}}}

?

c.)php客戶端使用json串如下:

$json = '{

???"query" : {

???????"match" : {

???????????"testField" : "abc"

???????}

??? }

}';

$params = [

???'index' => 'my_index',

???'type' => 'my_type',

???'body' => $json

];

$results = $client->search($params);

注:這種寫法在php客戶端能執行成功。

d.)應用到自己的項目如下:

if($user_input){

????????????????????????? ??? $json = '{

???????????????????????????????????????????????????? ??? "query":{

???????????????????????????????????????????????????? ??????? "multi_match":{

???????????????????????????????????????????????????? ??????????? "query":"通過改變橡皮筋的長度來改變拉力做功的數值",

???????????????????????????????????????????????????? ??????????? "fields":[

???????????????????????????????????????????????????? ??????????????? "text",

???????????????????????????????????????????????????? ??????????????? "content"

???????????????????????????????????????????????????? ??????????? ]

???????????????????????????????????????????????????? ??????? }

???????????????????????????????????????????????????? ??? }

???????????????????????????????????????????????????? }';

?????????????????????????????????? $params= array(

?????????????????????????????????? ??? 'index' => 'dzplib',

?????????????????????????????????? ??? 'type' => $index_type,

?????????????????????????????????? ??? 'body' => $json

????????????????????????? ??? );

?????????????????????????????????? $response= $client->search($params);

?????????????????????????????????? print_r($response);

???????? }

e.)改成數組方式如下:

if($user_input){

?????????????????????????????????? $params= array(

?????????????????????????????????? ??? 'index' => 'dzplib',

?????????????????????????????????? ??? 'type' => $index_type,

?????????????????????????????????? ??? 'body' => array(

????????????????????????? ??????????? 'query' => array('multi_match'=>

array('query'=>$user_input,'fields'=>array('text','content'))),

????????????????????????? ??????????? 'highlight' => array(

???????????????????????????????????????????????????? ??? 'fields' => array(

???????????????????????????????????????????????????? ??????? $index_field => new \stdClass()

???????????????????????????????????????????????????? ??? )

??????????????????????????????????????????? ??? ),

??????????????????????????????????????????? 'size'=>3,? //可以限制輸出的結果個數

????????????????????????? ??????? )??

????????????????????????? ??? );

?

?????????????????????????????????? $response= $client->search($params);

?????????????????????????????????? print_r($response);

????????????????? }


?1.2 ProblemelementName設中文分詞ik

1描述:

現在作用在選項上,是實現了,但效果并不好。就是說我把四個選項全寫上,搜題搜索不出來。我分析原因在于:答案和解析里面有elementContent;因此,我想到的優化策略是:在搜索中去掉答案和解析中的檢索。

2ProblemelementName中加入ik

成功了,但遇到二個問題。一是必須要先建個索引dzplib,之后再更新dzplib;二是類型Problem中加入了elementName的ik,那Paper中elementName也要加ik,否則,不能更新成功。另外,如果說沒刪除數據庫的話,就更新,會說elementName已存在,不能對其進行更新。因為我設置的狀態是不能動態更新("dynamic":"false")

2017年3月28日星期二

總結

以上是生活随笔為你收集整理的第87篇ES之Elastica-php匹配多值字段及给Problem的elementName设中文分词ik的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。