आप उस उद्देश्य के लिए multi-fields उपयोग करें और अपनी analyzed
क्षेत्र के भीतर एक not_analyzed
उप क्षेत्र हो सकता है (यह इस उदाहरण में item
कॉल)।
{
"yourtype": {
"properties": {
"item": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
मानचित्रण के इस प्रकार के साथ
है, तो आप देख सकते हैं कि मान Hamburgers
और Hamburger Buns
में से प्रत्येक के अपने बहु क्षेत्र item
और item.raw
करने के लिए "देखी" कर रहे हैं सम्मान के साथ विश्लेषक द्वारा: अपने मानचित्रण इस तरह दिखना करना होगा
Hamburger
के लिए:
curl -XGET 'localhost:9200/yourtypes/_analyze?field=item&pretty' -d 'Hamburger'
{
"tokens" : [ {
"token" : "hamburger",
"start_offset" : 0,
"end_offset" : 10,
"type" : "<ALPHANUM>",
"position" : 1
} ]
}
curl -XGET 'localhost:9200/yourtypes/_analyze?field=item.raw&pretty' -d 'Hamburger'
{
"tokens" : [ {
"token" : "Hamburger",
"start_offset" : 0,
"end_offset" : 10,
"type" : "word",
"position" : 1
} ]
}
Hamburger Buns
के लिए:
curl -XGET 'localhost:9200/yourtypes/_analyze?field=item&pretty' -d 'Hamburger Buns'
{
"tokens" : [ {
"token" : "hamburger",
"start_offset" : 0,
"end_offset" : 10,
"type" : "<ALPHANUM>",
"position" : 1
}, {
"token" : "buns",
"start_offset" : 11,
"end_offset" : 15,
"type" : "<ALPHANUM>",
"position" : 2
} ]
}
curl -XGET 'localhost:9200/yourtypes/_analyze?field=item.raw&pretty' -d 'Hamburger Buns'
{
"tokens" : [ {
"token" : "Hamburger Buns",
"start_offset" : 0,
"end_offset" : 15,
"type" : "word",
"position" : 1
} ]
}
जैसा कि आप देख सकते हैं, not_analyzed
फ़ील्ड को इनपुट के रूप में ठीक से अनुक्रमित किया जा रहा है।
अब, चलो सूचकांक दो नमूना दस्तावेजों इस वर्णन करने के लिए:
curl -XPOST localhost:9200/yourtypes/_bulk -d '
{"index": {"_type": "yourtype", "_id": 1}}
{"item": "Hamburger"}
{"index": {"_type": "yourtype", "_id": 2}}
{"item": "Hamburger Buns"}
'
और अंत में, अपने सवाल का जवाब देने, अगर आप Hamburger
का सटीक मिलान करना चाहते हैं, तो आप अपने उप-क्षेत्र item.raw
भीतर खोज कर सकते इस तरह (ध्यान दें कि अगर मैच के लिए भी है):
curl -XPOST localhost:9200/yourtypes/yourtype/_search -d '{
"query": {
"term": {
"item.raw": "Hamburger"
}
}
}'
और आप प्राप्त करेंगे:
{
...
"hits" : {
"total" : 1,
"max_score" : 0.30685282,
"hits" : [ {
"_index" : "yourtypes",
"_type" : "yourtype",
"_id" : "1",
"_score" : 0.30685282,
"_source":{"item": "Hamburger"}
} ]
}
}
अद्यतन (देखें टिप्पणी/नीचे चर्चा और सवाल फिर से संपादित करें)
टिप्पणियों से अपने उदाहरण ले रहा है और HaMbUrGeR BuNs
मैच Hamburger buns
आप बस एक match
क्वेरी इस तरह से इसे प्राप्त कर सकता है की कोशिश कर रहा।
curl -XPOST localhost:9200/yourtypes/yourtype/_search?pretty -d '{
"query": {
"match": {
"item": {
"query": "HaMbUrGeR BuNs",
"operator": "and"
}
}
}
}'
ही दो अनुक्रमित दस्तावेज़ के आधार पर कौन सा ऊपर निकलेगा
{
...
"hits" : {
"total" : 1,
"max_score" : 0.2712221,
"hits" : [ {
"_index" : "yourtypes",
"_type" : "yourtype",
"_id" : "2",
"_score" : 0.2712221,
"_source":{"item": "Hamburger Buns"}
} ]
}
}
शिंगलों का उद्देश्य क्या है? – abroekhof
इसके अलावा, क्या पोर्टर और स्नोबॉल स्टेमर दोनों का उपयोग करने का कोई कारण है? – abroekhof
कोई कारण नहीं। यह सिर्फ एक उदाहरण है जो मेरे पास था और कुछ वास्तविक कोड दिखाने के लिए इसे जल्दी से बदलने में सक्षम था। महत्वपूर्ण भाग 'shingle' फ़िल्टर, 'token_count' प्रकार फ़ील्ड और क्वेरी स्वयं हैं। शेष फ़िल्टर केवल उदाहरण हैं: उन्हें बाहर निकाला जा सकता है, अन्य सामान जोड़ा गया है। –