ฉันเพิ่งเริ่มใช้ ElasticSearch และดูเหมือนจะไม่สามารถค้นหาส่วนใดส่วนหนึ่งของคำได้
ตัวอย่าง: ฉันมีเอกสารสามชุดจาก couchdb ที่จัดทำดัชนีใน ElasticSearch:
{
"_id" : "1",
"name" : "John Doeman",
"function" : "Janitor"
}
{
"_id" : "2",
"name" : "Jane Doewoman",
"function" : "Teacher"
}
{
"_id" : "3",
"name" : "Jimmy Jackal",
"function" : "Student"
}
ตอนนี้ฉันต้องการค้นหาเอกสารทั้งหมดที่มี "Doe"
curl http://localhost:9200/my_idx/my_type/_search?q=Doe
ที่ไม่กลับมาฮิตใด ๆ แต่ถ้าฉันค้นหา
curl http://localhost:9200/my_idx/my_type/_search?q=Doeman
ส่งคืนเอกสารหนึ่งฉบับ (John Doeman)
ฉันได้ลองตั้งค่าตัววิเคราะห์ที่แตกต่างกันและตัวกรองต่างๆเป็นคุณสมบัติของดัชนีของฉัน ฉันได้ลองใช้ข้อความค้นหาแบบเต็ม (ตัวอย่างเช่น:
{
"query": {
"term": {
"name": "Doe"
}
}
}
) แต่ดูเหมือนจะไม่ได้ผล
ฉันจะทำให้ ElasticSearch พบทั้ง John Doeman และ Jane Doewoman ได้อย่างไรเมื่อฉันค้นหา "Doe"
UPDATE
ฉันพยายามใช้โทเค็นและตัวกรอง nGram เช่นเดียวกับที่อิกอร์เสนอดังนี้:
{
"index": {
"index": "my_idx",
"type": "my_type",
"bulk_size": "100",
"bulk_timeout": "10ms",
"analysis": {
"analyzer": {
"my_analyzer": {
"type": "custom",
"tokenizer": "my_ngram_tokenizer",
"filter": [
"my_ngram_filter"
]
}
},
"filter": {
"my_ngram_filter": {
"type": "nGram",
"min_gram": 1,
"max_gram": 1
}
},
"tokenizer": {
"my_ngram_tokenizer": {
"type": "nGram",
"min_gram": 1,
"max_gram": 1
}
}
}
}
}
ปัญหาที่ฉันพบตอนนี้คือแต่ละแบบสอบถามส่งคืนเอกสารทั้งหมด คำแนะนำใด ๆ เอกสาร ElasticSearch เกี่ยวกับการใช้ nGram ไม่ดี ...