मैंने हाल ही में ElasticSearch का उपयोग शुरू किया है और मैं इसे किसी शब्द के एक भाग के लिए खोज करने के लिए प्रतीत नहीं कर सकता।
उदाहरण: मेरे पास ElasticSearch में अनुक्रमित मेरे couchdb से तीन दस्तावेज़ हैं:
{
"_id" : "1",
"name" : "John Doeman",
"function" : "Janitor"
}
{
"_id" : "2",
"name" : "Jane Doewoman",
"function" : "Teacher"
}
{
"_id" : "3",
"name" : "Jimmy Jackal",
"function" : "Student"
}
तो अब, मैं "डो" वाले सभी दस्तावेजों की खोज करना चाहता हूं
curl http://localhost:9200/my_idx/my_type/_search?q=Doe
यह कोई हिट नहीं है। लेकिन अगर मैं खोजता हूं
curl http://localhost:9200/my_idx/my_type/_search?q=Doeman
यह एक दस्तावेज़ (जॉन Doeman) लौटाता है।
मैंने अपने इंडेक्स के गुणों के रूप में अलग-अलग एनालाइज़र और अलग-अलग फ़िल्टर सेट करने की कोशिश की है। मैंने एक पूर्ण विकसित क्वेरी का उपयोग करने की भी कोशिश की है (उदाहरण के लिए:
{
"query": {
"term": {
"name": "Doe"
}
}
}
) लेकिन काम करने के लिए कुछ भी नहीं लगता है।
जब मैं "डो" खोजता हूं, तो मैं जॉन डोमेन और जेन डूमोमैन दोनों को कैसे ढूंढ सकता हूं?
अपडेट करें
मैंने 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
}
}
}
}
}
अब मेरे पास जो समस्या है वह यह है कि प्रत्येक और प्रत्येक क्वेरी सभी दस्तावेज़ लौटाता है। कोई संकेत? NGram का उपयोग करने पर ElasticSearch प्रलेखन महान नहीं है ...