Elasticsearch:模式分析器无法正常工作

时间:2017-05-28 13:07:00

标签: elasticsearch

这是我使用指定模式分析器的映射...

{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": "0",
    "analysis": {
      "analyzer": {
        "semi_colon_analyzer": {
          "type": "pattern",
          "pattern": ";"
        }
      }
    }
  },
  "mappings": {
    "test": {
      "properties": {
        "courseintakes": {
          "type": "text",
          "analyzer": "semi_colon_analyzer",
          "search_analyzer": "semi_colon_analyzer"
        },
        "course_id": {
          "type": "integer"
        }
      }
    }
  }
}

以下是我要索引的示例数据...

{
    "course_id": 1,
    "courseintakes": "Trimester 1; Trimester 2; Trimester 3"
}, {
    "course_id": 2,
    "courseintakes": "Trimester 1; Trimester 2"
}, {
    "course_id": 3,
    "courseintakes": "Trimester 2; Trimester 3"
}, {
    "course_id": 4,
    "courseintakes": "Trimester 1; Trimester 3"
}, {
    "course_id": 5,
    "courseintakes": "Trimester 3"
}

出于某种原因,我的模式分析器无法正常工作 ....当我测试分析仪时,即http://xx.xxx.xx.xxx:9200/all_test/_analyze?filter=semi_colon_analyzer&text=' Trimester 1'

我得到了这个....(而不是"令牌":"三个月1"

{
  "tokens": [
    {
      "token": "trimester",
      "start_offset": 1,
      "end_offset": 10,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "1",
      "start_offset": 11,
      "end_offset": 12,
      "type": "<NUM>",
      "position": 1
    }
  ]
}

我想要做的是,当有人在Trimester 1或Trimester 2上搜索时,它应该返回id为1,2,3和4 但不是5

如果有人在Trimester 1或Trimester 3上搜索,它应该返回id为1,2,3,4和5的课程,即所有课程。

实现这一目标的最佳方法是什么?

我尽力解释这一点,但如果还有什么不清楚的地方,请随时提出。

非常感谢ES专家提供的任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

您需要将analyzer更改为以下一个:

 "analysis": {
  "analyzer": {
    "semi_colon_analyzer": {
      "type": "pattern",
      "pattern": "; "        <=== Note this space
    }
  }
}

此外,您运行错误的查询来测试您的分析仪。您使用的是filter,而是需要使用analyzer密钥。正确的查询是

/_analyze?analyzer=semi_colon_analyzer&text=Trimester 1; Trimester 3

希望这会有所帮助!!