--- /dev/null
+package org.apache.lucene.benchmark.byTask.feeds;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.Properties;
+import java.util.Random;
+
+import org.apache.lucene.benchmark.byTask.utils.Config;
+
+/**
+ * Adds fields appropriate for sorting: country, random_string and sort_field
+ * (int). Supports the following parameters:
+ * <ul>
+ * <li><b>sort.rng</b> - defines the range for sort-by-int field (default
+ * <b>20000</b>).
+ * <li><b>rand.seed</b> - defines the seed to initialize Random with (default
+ * <b>13</b>).
+ * </ul>
+ */
+public class SortableSingleDocSource extends SingleDocSource {
+
+ private static String[] COUNTRIES = new String[] {
+ "European Union", "United States", "Japan", "Germany", "China (PRC)",
+ "United Kingdom", "France", "Italy", "Spain", "Canada", "Brazil", "Russia",
+ "India", "South Korea", "Australia", "Mexico", "Netherlands", "Turkey",
+ "Sweden", "Belgium", "Indonesia", "Switzerland", "Poland", "Norway",
+ "Republic of China", "Saudi Arabia", "Austria", "Greece", "Denmark", "Iran",
+ "South Africa", "Argentina", "Ireland", "Thailand", "Finland", "Venezuela",
+ "Portugal", "Hong Kong", "United Arab Emirates", "Malaysia",
+ "Czech Republic", "Colombia", "Nigeria", "Romania", "Chile", "Israel",
+ "Singapore", "Philippines", "Pakistan", "Ukraine", "Hungary", "Algeria",
+ "New Zealand", "Egypt", "Kuwait", "Peru", "Kazakhstan", "Slovakia",
+ "Morocco", "Bangladesh", "Vietnam", "Qatar", "Angola", "Libya", "Iraq",
+ "Croatia", "Luxembourg", "Sudan", "Slovenia", "Cuba", "Belarus", "Ecuador",
+ "Serbia", "Oman", "Bulgaria", "Lithuania", "Syria", "Dominican Republic",
+ "Tunisia", "Guatemala", "Azerbaijan", "Sri Lanka", "Kenya", "Latvia",
+ "Turkmenistan", "Costa Rica", "Lebanon", "Uruguay", "Uzbekistan", "Yemen",
+ "Cyprus", "Estonia", "Trinidad and Tobago", "Cameroon", "El Salvador",
+ "Iceland", "Panama", "Bahrain", "Ivory Coast", "Ethiopia", "Tanzania",
+ "Jordan", "Ghana", "Bosnia and Herzegovina", "Macau", "Burma", "Bolivia",
+ "Brunei", "Botswana", "Honduras", "Gabon", "Uganda", "Jamaica", "Zambia",
+ "Senegal", "Paraguay", "Albania", "Equatorial Guinea", "Georgia",
+ "Democratic Republic of the Congo", "Nepal", "Afghanistan", "Cambodia",
+ "Armenia", "Republic of the Congo", "Mozambique", "Republic of Macedonia",
+ "Malta", "Namibia", "Madagascar", "Chad", "Burkina Faso", "Mauritius",
+ "Mali", "The Bahamas", "Papua New Guinea", "Nicaragua", "Haiti", "Benin",
+ "alestinian flag West Bank and Gaza", "Jersey", "Fiji", "Guinea", "Moldova",
+ "Niger", "Laos", "Mongolia", "French Polynesia", "Kyrgyzstan", "Barbados",
+ "Tajikistan", "Malawi", "Liechtenstein", "New Caledonia", "Kosovo",
+ "Rwanda", "Montenegro", "Swaziland", "Guam", "Mauritania", "Guernsey",
+ "Isle of Man", "Togo", "Somalia", "Suriname", "Aruba", "North Korea",
+ "Zimbabwe", "Central African Republic", "Faroe Islands", "Greenland",
+ "Sierra Leone", "Lesotho", "Cape Verde", "Eritrea", "Bhutan", "Belize",
+ "Antigua and Barbuda", "Gibraltar", "Maldives", "San Marino", "Guyana",
+ "Burundi", "Saint Lucia", "Djibouti", "British Virgin Islands", "Liberia",
+ "Seychelles", "The Gambia", "Northern Mariana Islands", "Grenada",
+ "Saint Vincent and the Grenadines", "Saint Kitts and Nevis", "East Timor",
+ "Vanuatu", "Comoros", "Samoa", "Solomon Islands", "Guinea-Bissau",
+ "American Samoa", "Dominica", "Micronesia", "Tonga", "Cook Islands",
+ "Palau", "Marshall Islands", "S�o Tom� and Pr�ncipe", "Anguilla",
+ "Kiribati", "Tuvalu", "Niue" };
+
+ private int sortRange;
+ private Random r;
+
+ @Override
+ public DocData getNextDocData(DocData docData) throws NoMoreDataException {
+ docData = super.getNextDocData(docData);
+ Properties props = new Properties();
+
+ // random int
+ props.put("sort_field", Integer.toString(r.nextInt(sortRange)));
+
+ // random string
+ int len = nextInt(2, 20);
+ char[] buffer = new char[len];
+ for (int i = 0; i < len; i++) {
+ buffer[i] = (char) r.nextInt(0x80);
+ }
+ props.put("random_string", new String(buffer));
+
+ // random country
+ props.put("country", COUNTRIES[r.nextInt(COUNTRIES.length)]);
+ docData.setProps(props);
+ return docData;
+ }
+
+ private int nextInt(int start, int end) {
+ return start + r.nextInt(end - start);
+ }
+
+ @Override
+ public void setConfig(Config config) {
+ super.setConfig(config);
+ sortRange = config.get("sort.rng", 20000);
+ r = new Random(config.get("rand.seed", 13));
+ }
+
+}