如何使用关键字分析器搜索?

时间:2015-03-02 12:57:53

标签: elasticsearch

我将关键字分析器作为默认分析器,如下所示:

{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "default": {
            "type": "keyword"
}}}}}}

```

但现在我无法搜索任何内容。 e.g:

{
  "query": {
    "query_string": {
      "query": "cast"
}}}

给我0结果尽管"演员"是索引文档的常见值。 (http://gist.github.com/baelter/b0720a52ee5a27e27d3a

搜索" *"工作得很好btw。

我的映射中只有显式默认值:

{
  "oceanography_point": {
    "_all" : {
      "enabled" : true
    },
    "properties" : {}
 }
}

索引的行为就好像_all中没有包含任何字段一样,因为field:value查询工作正常。

我是否滥用了关键字分析器?

2 个答案:

答案 0 :(得分:1)

使用关键字分析器,您只能进行精确的字符串匹配。 让我们假设您使用了关键字分析器而没有过滤器。 在那种情况下,作为字符串索引为"扔掉森林" ,既没有搜索"演员"或者"离开"将工作。你需要做一个准确的"扔掉森林"字符串来匹配它。 (假设没有使用小写过滤器,你也需要给出正确的案例)

更好的方法是使用multi fields声明一个副本作为关键字分析,另一个正常。 您可以搜索其中一个字段并在另一个字段上进行汇总。

答案 1 :(得分:1)

Okey,大约15小时的反复试验我可以得出结论,这适用于搜索:

{
  "settings": {
    "index": {
      "analysis": {
        "tokenizer": {
          "default": {
            "type": "keyword"
}}}}}}

这怎么会破坏分面,所以我最终使用动态模板:

"dynamic_templates" : [
  {
    "strings_not_analyzed" : {
      "match" : "*",
      "match_mapping_type" : "string",
      "mapping" : {
        "type" : "string",
        "index" : "not_analyzed"
      }
    }
  }
],