这是我正在搜索的JSON....
{ courseintakes: "Trimester 1; Trimester 2; Trimester 3" }
{ courseintakes: "Trimester 1; Trimester 2" }
{ courseintakes: "Trimester 2; Trimester 3" }
{ courseintakes: "Trimester 1"}
{ courseintakes: "Trimester 3"}
我还设置了一个自定义分析器并应用于此字段,该字段在分号(;)
..."analysis": {
"analyzer": {
"semi_colon_analyzer": {
"type": "pattern",
"pattern": ";"
}
}
}
现在,有效搜索此字段的最佳方法是什么...
我试过这个(没有返回结果(
"must": [
{
"terms": {
"courseintakes": [
"Trimester 2",
"Trimester 3"
]
}
}
然后,我尝试了这个(没有返回结果(
"match": {
"courseintakes": "Trimester 2,Trimester 3"
}
我做错了什么?我应该如何有效地搜索这个?
示例场景:我所期望的是,当我搜索三个月 1 和三个月 2 时,它应该返回列出这些三个月中的任何一个的所有行/记录。
这是映射
{
"mappings": {
"courses": {
"properties": {
"courseintakes": {
"type": "text"
},
"course_id": {
"type": "integer"
}
}
}
}
}
如果有什么不清楚的地方,请随时询问。
任何帮助都非常感谢。谢谢
您必须更改自定义分析器。您可以使用分析 API 查看如何根据当前分析器分析文本
: POST custom/_analyze?analyzer=semi_colon_analyzer
{
"text" : "Trimester 1; Trimester 3"
}
您将获得以下输出:
{
"tokens": [
{
"token": " trimester 1", <==== Please note a space in beginning
"start_offset": 0,
"end_offset": 11,
"type": "word",
"position": 0
},
{
"token": " trimester 3", <==== Please note a space in beginning
"start_offset": 13,
"end_offset": 24,
"type": "word",
"position": 1
}
]
}
将分析仪更改为 :
"analyzer": {
"semi_colon_analyzer": {
"type": "pattern",
"pattern": "; ", <== Space after semi colon
"lowercase" : false
}
}
您的文本将以以下形式标记:
{
"tokens": [
{
"token": "Trimester 1", <==== No space in beginning
"start_offset": 0,
"end_offset": 11,
"type": "word",
"position": 0
},
{
"token": " trimester 3", <==== No space in beginning
"start_offset": 13,
"end_offset": 24,
"type": "word",
"position": 1
}
]
}
然后应用terms
查询,它将起作用
{
"terms": {
"courseintakes": [
"Trimester 2",
"Trimester 3"
]
}
}
希望有帮助!!