ฉันกำลังพยายามกำหนดค่าการค้นหาแบบยืดหยุ่นด้วยคำพ้องความหมาย
นี่คือการตั้งค่าของฉัน:
"analysis": {
"analyzer": {
"category_synonym": {
"tokenizer": "whitespace",
"filter": [
"synonym_filter"
]
}
},
"filter": {
"synonym_filter": {
"type": "synonym",
"synonyms_path": "synonyms.txt"
}
}
}
การกำหนดค่าการแมป:
"category": {
"properties": {
"name": {
"type":"string",
"search_analyzer" : "category_synonym",
"index_analyzer" : "standard",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
และรายการคำพ้องความหมายของฉัน
film => video,
ooh => panels , poster,
commercial => advertisement,
print => magazine
ฉันต้องบอกว่าฉันใช้ Elasticsearch Java API ฉันใช้ QueryBuilders.queryStringQuery
เพราะนี่เป็นวิธีเดียวที่ฉันตั้งค่าตัววิเคราะห์ตามคำขอของฉัน ดังนั้นเมื่อฉันทำ:
QueryBuilders.queryStringQuery("name:film").analyzer(analyzer)
มันส่งคืนฉัน
[
{
"id": 71,
"name": "Pitch video",
"description": "... ",
"parent": null
},
{
"id": 25,
"name": "Video",
"description": "... ",
"parent": null
}
]
นั่นเหมาะสำหรับฉัน แต่เมื่อฉันกำลังเรียกอะไรแบบนี้
QueryBuilders.queryStringQuery("name:vid").analyzer(analyzer)
ฉันคาดหวังว่ามันควรจะส่งคืนวัตถุเดียวกัน แต่ไม่มีอะไรเลย: []
ดังนั้นฉันจึงเพิ่มเครื่องหมายดอกจันไปที่ queryStringQuery
:
QueryBuilders.queryStringQuery("name:vid*").analyzer(analyzer)
ใช้งานได้ดี แต่ตอนนี้
QueryBuilders.queryStringQuery("name:film*").analyzer(analyzer)
คืนให้ฉัน []
ดังนั้น ฉันจะกำหนดค่าการค้นหาแบบยืดหยุ่นได้อย่างไรเพื่อให้ส่งคืนออบเจ็กต์เดียวกันเมื่อฉันค้นหา video
, vid
, film
และ fil
ขอบคุณล่วงหน้า!