duanjunjie0196 2016-02-12 06:18
浏览 355
已采纳

如何使用ElasticSearch索引搜索单词的一部分

I've recently started using ElasticSearch and I can't seem to make it search for a part of a word.

Example: I have three documents from my couchdb indexed in ElasticSearch:

{
 "_id" : "1",
 "name" : "John Doeman",
 "function" : "Janitor"
}
{
 "_id" : "2",
 "name" : "Jane Doewoman",
 "function" : "Teacher"
}
{
 "_id" : "3",
 "name" : "Jimmy Jackal",
 "function" : "Student"
} 

So now, I want to search for all documents containing "Doe"

curl http://localhost:9200/my_idx/my_type/_search?q=Doe

That doesn't return any hits. But if I search for

curl http://localhost:9200/my_idx/my_type/_search?q=Doeman

It does return one document (John Doeman).

Am trying with this url http://localhost/el/index.php?str=*doe*.

<?php
require 'vendor/autoload.php';
$client = Elasticsearch\ClientBuilder::create()->build();

$params = array();
$params['index'] = 's3';
$params['type'] = 's3files';
$params['body']['query']['match']['content'] = $_GET['str'];

$result = $client->search($params);
echo "<pre>";
print_r($result);

How can I make ElasticSearch find both John Doeman and Jane Doewoman when I search for "Doe" ?

  • 写回答

2条回答 默认 最新

  • douaonong7807 2016-02-12 06:22
    关注

    You can simply try using a wildcard first:

    curl http://localhost:9200/my_idx/my_type/_search?q=Doe*
    

    If that's enough, you can get away with that. Otherwise, there are other more advanced solutions by creating custom analyzers with edge ngram tokenizers and filters.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题