आप एक अद्वितीय क्षेत्र (उदाहरण आईडी के लिए) और एक यादृच्छिक नमक के हैश फ़ंक्शन का उपयोग करके सॉर्ट कर सकते हैं। कैसे सही मायने में यादृच्छिक परिणाम होना चाहिए के आधार पर आप के रूप में के रूप में आदिम कुछ कर सकते हैं:
{
"query" : { "query_string" : {"query" : "*:*"} },
"sort" : {
"_script" : {
"script" : "(doc['_id'].value + salt).hashCode()",
"type" : "number",
"params" : {
"salt" : "some_random_string"
},
"order" : "asc"
}
}
}
या के रूप में
{
"query" : { "query_string" : {"query" : "*:*"} },
"sort" : {
"_script" : {
"script" : "org.elasticsearch.common.Digest.md5Hex(doc['_id'].value + salt)",
"type" : "string",
"params" : {
"salt" : "some_random_string"
},
"order" : "asc"
}
}
}
दूसरे उदाहरण अधिक यादृच्छिक परिणाम देगा लेकिन कुछ हद तक धीमी हो जाएगा के रूप में परिष्कृत कुछ ।
फ़ील्ड _id
को संग्रहीत करने के लिए इस दृष्टिकोण के लिए संग्रहीत किया जाना है। अन्यथा, क्वेरी NullPointerException
के साथ विफल हो जाएगी।
क्या मैं क्लाइंट पर स्ट्रिंग को स्टोर करूंगा? उदाहरण के लिए एक कुकी में? ताकि जब उपयोगकर्ता पृष्ठ 2 के लिए कॉल करता है तो वही आदेश संरक्षित होता है? – Yeggeps
नमक स्ट्रिंग को उत्पन्न किया जाना चाहिए और उस परत पर संग्रहीत किया जाना चाहिए जो उपयोगकर्ता के सत्र को बनाए रखता है। यह वही स्थान हो सकता है जहां आप उपयोगकर्ता की क्वेरी या वर्तमान में प्रदर्शित पृष्ठ संख्या संग्रहीत करते हैं। यह कुकी भी हो सकता है। – imotov