第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日星期二

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值