首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch:无法使用Kuromoji读取表单筛选器进行搜索

Elasticsearch:无法使用Kuromoji读取表单筛选器进行搜索
EN

Stack Overflow用户
提问于 2013-06-26 08:44:24
回答 1查看 1.4K关注 0票数 2

我使用的是Elasticsearch 0.90.1和Kuromoji插件1.4.0。

代码语言:javascript
复制
$ curl localhost:9200
{
  "ok" : true,
  "status" : 200,
  "name" : "Agent Zero",
  "version" : {
    "number" : "0.90.1",
    "snapshot_build" : false,
    "lucene_version" : "4.3"
  },
  "tagline" : "You Know, for Search"
}

我为我的default分析器创建了一个新的索引,使用了Kuromoji:

代码语言:javascript
复制
$ curl -X PUT localhost:9200/test -d '{
  "index": {
    "analysis": {
      "filter": {
        "kuromoji_rf": {
          "type": "kuromoji_readingform",
          "use_romaji": "false"
        }
      },
      "tokenizer": {
        "kuromoji": {
          "type": "kuromoji_tokenizer"
        }
      },
      "analyzer": {
        "default": {
          "type": "custom",
          "tokenizer": "kuromoji",
          "filter": [
            "kuromoji_rf"
          ]
        }
      }
    }
  }
}'

结果:

代码语言:javascript
复制
{
  "ok": true,
  "acknowledged": true
}

阅读形式的标记筛选器似乎工作正常(汉字规范化为片假名):

代码语言:javascript
复制
$ curl localhost:9200/test/_analyze -d '東京'

结果:

代码语言:javascript
复制
{
  "tokens": [
    {
      "token": "トウキョウ",
      "start_offset": 0,
      "end_offset": 2,
      "type": "word",
      "position": 1
    }
  ]
}

为文档编制索引:

代码语言:javascript
复制
$ curl -X PUT localhost:9200/test/docs/1 -d '{
  "body": "これは関西国際空港です"
}'

结果:

代码语言:javascript
复制
{
  "ok": true,
  "_index": "test",
  "_type": "docs",
  "_id": "1",
  "_version": 1
}%

索引文档与通配符查询匹配:

代码语言:javascript
复制
$ curl 'localhost:9200/test/docs/_search?q=body:*'

结果:

代码语言:javascript
复制
{
  "took": 109,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 1.0,
    "hits": [
      {
        "_index": "test",
        "_type": "docs",
        "_id": "1",
        "_score": 1.0,
        "_source": {
          "body": "これは関西国際空港です"
        }
      }
    ]
  }
}

然而,当我使用日语搜索时,它并不匹配:

代码语言:javascript
复制
$ curl 'localhost:9200/test/docs/_search?q=body:空港'

结果:

代码语言:javascript
复制
{
  "took": 21,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

$ curl 'localhost:9200/test/docs/_search?q=body:クウコウ'

结果:

代码语言:javascript
复制
{
  "took": 95,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

$ curl 'localhost:9200/test/docs/_search?q=body:空'

结果:

代码语言:javascript
复制
{
  "took": 22,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

我想知道是否分析器没有用于搜索查询,但指定分析器没有帮助:

代码语言:javascript
复制
$ curl 'localhost:9200/test/docs/_search?analyzer=default&q=body:空港'

结果:

代码语言:javascript
复制
{
  "took": 17,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

顺便说一下,如果我禁用令牌过滤器,一切都会正常工作。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-26 13:18:19

也许您的URL(e.x.不是localhost:9200/test/docs/_search?q=body:クウコウ编码的字符串。

我尝试执行以下命令,返回结果。

"クウコウ" -> "%E3%82%AF%E3%82%A6%E3%82%B3%E3%82%A6"

代码语言:javascript
复制
curl 'http://localhost:9200/test/docs/_search?q=body:%E3%82%AF%E3%82%A6%E3%82%B3%E3%82%A6'
{
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.11506981,
    "hits": [
      {
        "_index": "test",
        "_type": "docs",
        "_id": "1",
        "_score": 0.11506981,
        "_source": {
          "body": "これは関西国際空港です"
        }
      }
    ]
  }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17309831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档