我一直试图解决这个问题超过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中使特殊字符工作