相关疑难解决方法(0)

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

我最近开始使用ElasticSearch,我似乎无法让它搜索一个单词的一部分.

示例:我在我的couchdb中有三个索引在ElasticSearch中索引的文档:

{
  "_id" : "1",
  "name" : "John Doeman",
  "function" : "Janitor"
}
{
  "_id" : "2",
  "name" : "Jane Doewoman",
  "function" : "Teacher"
}
{
  "_id" : "3",
  "name" : "Jimmy Jackal",
  "function" : "Student"
} 
Run Code Online (Sandbox Code Playgroud)

所以现在,我想搜索包含"Doe"的所有文件

curl http://localhost:9200/my_idx/my_type/_search?q=Doe
Run Code Online (Sandbox Code Playgroud)

这不会返回任何命中.但是,如果我搜索

curl http://localhost:9200/my_idx/my_type/_search?q=Doeman
Run Code Online (Sandbox Code Playgroud)

它确实返回一个文件(John Doeman).

我尝试过设置不同的分析器和不同的过滤器作为索引的属性.我也试过使用完整的查询(例如:

{
  "query": {
    "term": {
      "name": "Doe"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但似乎没有任何作用.

当我搜索"Doe"时,如何让ElasticSearch找到John Doeman和Jane Doewoman?

UPDATE

我尝试使用nGram标记器和过滤器,就像Igor提出的那样,如下所示:

{
  "index": {
    "index": "my_idx",
    "type": "my_type",
    "bulk_size": "100",
    "bulk_timeout": "10ms",
    "analysis": {
      "analyzer": {
        "my_analyzer": { …
Run Code Online (Sandbox Code Playgroud)

elasticsearch

116
推荐指数
7
解决办法
9万
查看次数

标签 统计

elasticsearch ×1