Saya baru-baru ini mulai menggunakan ElasticSearch dan sepertinya saya tidak dapat membuatnya mencari bagian kata.
Contoh: Saya punya tiga dokumen dari couchdb saya yang diindeks di ElasticSearch:
{
"_id" : "1",
"name" : "John Doeman",
"function" : "Janitor"
}
{
"_id" : "2",
"name" : "Jane Doewoman",
"function" : "Teacher"
}
{
"_id" : "3",
"name" : "Jimmy Jackal",
"function" : "Student"
}
Jadi sekarang, saya ingin mencari semua dokumen yang mengandung "Doe"
curl http://localhost:9200/my_idx/my_type/_search?q=Doe
Itu tidak menghasilkan hit. Tetapi jika saya mencari
curl http://localhost:9200/my_idx/my_type/_search?q=Doeman
Itu mengembalikan satu dokumen (John Doeman).
Saya telah mencoba menetapkan analisator dan filter yang berbeda sebagai properti indeks saya. Saya juga telah mencoba menggunakan kueri penuh yang meledak (misalnya:
{
"query": {
"term": {
"name": "Doe"
}
}
}
) Tapi sepertinya tidak ada yang berhasil.
Bagaimana saya dapat membuat ElasticSearch menemukan John Doeman dan Jane Doewoman ketika saya mencari "Doe"?
MEMPERBARUI
Saya mencoba menggunakan tokenizer dan filter nGram, seperti yang diusulkan Igor, seperti ini:
{
"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
}
}
}
}
}
Masalah yang saya alami sekarang adalah setiap query mengembalikan SEMUA dokumen. Ada petunjuk? Dokumentasi ElasticSearch tentang penggunaan nGram tidak bagus ...