这是我使用指定模式分析器的映射...
{
"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专家提供的任何帮助。
由于
答案 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
希望这会有所帮助!!