如何索引特殊字符并在Elasticsearch中搜索这些特殊字符

时间:2016-02-23 15:13:47

标签: php elasticsearch

我一直试图解决这个问题超过20天,但无法使其正常运行。 我也是Elasticsearch的新手,因为这是我们实施的第一个项目。

第1步: 我在Ubuntu 14.04中安装了Elasticsearch 2.0。我可以使用下面的代码

创建新的索引
$hosts = array('our ip address:9200');
$client = \Elasticsearch\ClientBuilder::create()->setHosts($hosts)->build();
$index = "IndexName";
$params['index'] = $index;
$params['type']  = 'xyz';
$params['body']["id"] = "1";
$params['body']["title"] = "C++ Developer - C# Developer";
$client->index($params);

一旦上面的代码运行Index成功创建。

第2步: 能够使用以下链接查看创建的索引

http://our ip address:9200/IndexName/_search?q=C%23&pretty

{
"took" : 30,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 9788,
"max_score" : 0.8968174,
"hits" : [ {
"_index" : "IndexName",
"_type" : "xyz",
"_id" : "1545680",
"_score" : 0.8968174,
"_source":{"id":"1545680","title":"C\\+\\+ and C\\# \\- Software Engineer"}
}, {
"_index" : "IndexName",
"_type" : "xyz",
"_id" : "1539778",
"_score" : 0.853807,
"_source":{"id":"1539778","title":"Rebaca Technologies Hiring in C\\+\\+"}
}
....

如果你注意到上面的搜索结果,我得到第二个没有c#的结果。即使我得到相同的搜索结果" C"仅

根据包含+,#或者特殊字符的关键字,我没有获得相关搜索结果。

我按照以下指南保留特殊字符

转义特殊字符

Lucene支持转义属于查询语法的特殊字符。当前列表的特殊字符是

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ 

要逃避这些角色,请在角色前使用\。例如,要搜索(1 + 1):2,请使用查询:

\(1\+1\)\:2

我在转义字符组中添加了#。

第3步:

在php中将特殊字符传递给Elasticsearch搜索功能时,我正在逃避,如下所示

$keyword = str_replace(""",'"',$keyword);
$keyword = str_replace("+","\+",$keyword);
$keyword = str_replace(".","\.",$keyword);
$keyword = str_replace("#","\#",$keyword);
$keyword = str_replace("/","\/",$keyword);
$keyword = trim($keyword);

$params['body']['query']['query_string'] = array("query" =>        $keyword,"default_operator" => "AND" ,"fields" => array("title"));

$客户端 - >搜索($ PARAMS);

请帮助我如何在Elasticsearch中使特殊字符工作

0 个答案:

没有答案