Kısa süre önce ElasticSearch kullanmaya başladım ve bir kelimenin bir kısmını aramasını sağlayamıyorum.
Örnek: couchdb'den ElasticSearch'te indekslenmiş üç dokümanım var:
{
"_id" : "1",
"name" : "John Doeman",
"function" : "Janitor"
}
{
"_id" : "2",
"name" : "Jane Doewoman",
"function" : "Teacher"
}
{
"_id" : "3",
"name" : "Jimmy Jackal",
"function" : "Student"
}
Şimdi, "Doe" içeren tüm belgeleri aramak istiyorum
curl http://localhost:9200/my_idx/my_type/_search?q=Doe
Bu herhangi bir isabet döndürmez. Ama ararsam
curl http://localhost:9200/my_idx/my_type/_search?q=Doeman
Bir belge (John Doeman) döndürür.
İndeksimin özellikleri olarak farklı çözümleyiciler ve farklı filtreler ayarlamayı denedim. Ayrıca tam gelişmiş bir sorgu kullanmayı denedim (örneğin:
{
"query": {
"term": {
"name": "Doe"
}
}
}
) Ama hiçbir şey işe yaramıyor gibi görünüyor.
ElasticSearch'ün "Doe" kelimesini aradığımda hem John Doeman hem de Jane Doewoman'ı bulmasını nasıl sağlayabilirim?
GÜNCELLEME
Igor'un önerdiği gibi nGram jetonlaştırıcıyı ve filtreyi şu şekilde kullanmaya çalıştım:
{
"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
}
}
}
}
}
Şu anda yaşadığım sorun, her sorgunun TÜM belgeleri döndürmesidir. Herhangi bir işaret var mı? NGram kullanımıyla ilgili ElasticSearch belgeleri harika değil ...