这是我正在搜索的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"
}
我做错了什么?我该如何有效地搜索这个?
示例场景:我期待的是当我搜索 Trimester 1&三学期,它应该返回列出这些学期中任何一个/任何学期的所有行/记录。
这是映射
{
"mappings": {
"courses": {
"properties": {
"courseintakes": {
"type": "text"
},
"course_id": {
"type": "integer"
}
}
}
}
}
如果有任何不明确的地方,请随时提出。
非常感谢任何帮助。感谢
答案 0 :(得分:0)
您必须更改自定义分析器。您可以使用Analyze 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"
]
}
}
希望它有所帮助!!