pylucene 3.5.0-3
[pylucene.git] / lucene-java-3.5.0 / lucene / contrib / benchmark / src / java / org / apache / lucene / benchmark / byTask / feeds / SortableSingleDocSource.java
diff --git a/lucene-java-3.5.0/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/SortableSingleDocSource.java b/lucene-java-3.5.0/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/SortableSingleDocSource.java
new file mode 100644 (file)
index 0000000..a7da954
--- /dev/null
@@ -0,0 +1,114 @@
+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));
+  }
+  
+}