/**
 * 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.
 */

package org.apache.solr;

import org.apache.solr.request.*;
import org.junit.BeforeClass;
import org.junit.Test;

import java.util.*;

    
/**
 * This tests was converted from a legacy testing system.
 *
 * it does not represent the best practices that should be used when
 * writing Solr JUnit tests
 */
public class ConvertedLegacyTest extends SolrTestCaseJ4 {

  @BeforeClass
  public static void beforeTests() throws Exception {
    initCore("solrconfig.xml","schema.xml");
  }

  @Test
  public void testABunchOfConvertedStuff() {
    // these may be reused by things that need a special query
    SolrQueryRequest req = null;
    Map<String,String> args = new HashMap<String,String>();
    lrf.args.put("version","2.0");
    lrf.args.put("defType","lucenePlusSort");

    // compact the index, keep things from getting out of hand

    assertU("<optimize/>");

    // test query

    assertQ(req("qlkciyopsbgzyvkylsjhchghjrdf")
            ,"//result[@numFound='0']"
            );

    // test escaping of ";"

    assertU("<delete><id>42</id></delete>");
    assertU("<add><doc><field name=\"id\">42</field><field name=\"val_s\">aa;bb</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:42 AND val_s:aa\\;bb")
            ,"//*[@numFound='1']"
            );
    assertQ(req("id:42 AND val_s:\"aa;bb\"")
            ,"//*[@numFound='1']"
            );
    assertQ(req("id:42 AND val_s:\"aa\"")
            ,"//*[@numFound='0']"
            );



    // test allowDups default of false

    assertU("<delete><id>42</id></delete>");
    assertU("<add><doc><field name=\"id\">42</field><field name=\"val_s\">AAA</field></doc></add>");
    assertU("<add><doc><field name=\"id\">42</field><field name=\"val_s\">BBB</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:42")
            ,"//*[@numFound='1'] "
            ,"//str[.='BBB']"
            );
    assertU("<add><doc><field name=\"id\">42</field><field name=\"val_s\">CCC</field></doc></add>");
    assertU("<add><doc><field name=\"id\">42</field><field name=\"val_s\">DDD</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:42")
            ,"//*[@numFound='1'] "
            ,"//str[.='DDD']"
            );
    assertU("<delete><id>42</id></delete>");

    // test deletes

    assertU("<delete><query>id:[100 TO 110]</query></delete>");
    assertU("<add allowDups=\"false\"><doc><field name=\"id\">101</field></doc></add>");
    assertU("<add allowDups=\"false\"><doc><field name=\"id\">101</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">105</field></doc></add>");
    assertU("<add allowDups=\"false\"><doc><field name=\"id\">102</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">103</field></doc></add>");
    assertU("<add allowDups=\"false\"><doc><field name=\"id\">101</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:[100 TO 110]")
            ,"//*[@numFound='4']"
            );
    assertU("<delete><id>102</id></delete>");
    assertU("<commit/>");
    assertQ(req("id:[100 TO 110]")
            ,"//*[@numFound='3']"
            );
    assertU("<delete><query>id:105</query></delete>");
    assertU("<commit/>");
    assertQ(req("id:[100 TO 110]")
            ,"//*[@numFound='2']"
            );
    assertU("<delete><query>id:[100 TO 110]</query></delete>");
    assertU("<commit/>");
    assertQ(req("id:[100 TO 110]")
            ,"//*[@numFound='0']"
            );

    // test range

    assertU("<delete><id>44</id></delete>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"val_s\">apple</field><field name=\"val_s1\">apple</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"val_s\">banana</field><field name=\"val_s1\">banana</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"val_s\">pear</field><field name=\"val_s1\">pear</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("val_s:[a TO z]")
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=3] "
            ,"//*[@start='0']"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "standard", 2, 5 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=1] "
            ,"*//doc[1]/str[.='pear'] "
            ,"//*[@start='2']"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "standard", 3, 5 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "standard", 4, 5 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "standard", 25, 5 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "standard", 0, 1 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=1] "
            ,"*//doc[1]/str[.='apple']"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "standard", 0, 2 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=2] "
            ,"*//doc[2]/str[.='banana']"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "standard", 1, 1 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=1] "
            ,"*//doc[1]/str[.='banana']"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "standard", 3, 1 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "standard", 4, 1 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "standard", 1, 0 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "standard", 0, 0 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    args.put("defType","lucenePlusSort");
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z];val_s1 asc",
                                    "standard", 0, 0 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    args.put("defType","lucenePlusSort");
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z];val_s1 desc",
                                    "standard", 0, 0 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    assertQ(req("val_s:[a TO b]")
            ,"//*[@numFound='1']"
            );
    assertQ(req("val_s:[a TO cat]")
            ,"//*[@numFound='2']"
            );
    assertQ(req("val_s:[a TO *]")
            ,"//*[@numFound='3']"
            );
    assertQ(req("val_s:[* TO z]")
            ,"//*[@numFound='3']"
            );
    assertQ(req("val_s:[* TO *]")
            ,"//*[@numFound='3']"
            );
    assertQ(req("val_s:[apple TO pear]")
            ,"//*[@numFound='3']"
            );
    assertQ(req("val_s:[bear TO boar]")
            ,"//*[@numFound='0']"
            );
    assertQ(req("val_s:[a TO a]")
            ,"//*[@numFound='0']"
            );
    assertQ(req("val_s:[apple TO apple]")
            ,"//*[@numFound='1']"
            );
    assertQ(req("val_s:{apple TO pear}")
            ,"//*[@numFound='1']"
            );
    assertQ(req("val_s:{a TO z}")
            ,"//*[@numFound='3']"
            );
    assertQ(req("val_s:{* TO *}")
            ,"//*[@numFound='3']"
            );
    // test rangequery within a boolean query

    assertQ(req("id:44 AND val_s:[a TO z]")
            ,"//*[@numFound='3']"
            );
    assertQ(req("id:44 OR val_s:[a TO z]")
            ,"//*[@numFound='3']"
            );
    assertQ(req("val_s:[a TO b] OR val_s:[b TO z]")
            ,"//*[@numFound='3']"
            );
    assertQ(req("+val_s:[a TO b] -val_s:[b TO z]")
            ,"//*[@numFound='1']"
            );
    assertQ(req("-val_s:[a TO b] +val_s:[b TO z]")
            ,"//*[@numFound='2']"
            );
    assertQ(req("val_s:[a TO c] AND val_s:[apple TO z]")
            ,"//*[@numFound='2']"
            );
    assertQ(req("val_s:[a TO c] AND val_s:[a TO apple]")
            ,"//*[@numFound='1']"
            );
    assertQ(req("id:44 AND (val_s:[a TO c] AND val_s:[a TO apple])")
            ,"//*[@numFound='1']"
            );
    assertQ(req("(val_s:[apple TO apple] OR val_s:[a TO c]) AND (val_s:[b TO c] OR val_s:[b TO b])")
            ,"//*[@numFound='1'] "
            ,"//str[.='banana']"
            );
    assertQ(req("(val_s:[apple TO apple] AND val_s:[a TO c]) OR (val_s:[p TO z] AND val_s:[a TO z])")
            ,"//*[@numFound='2'] "
            ,"//str[.='apple'] "
            ,"//str[.='pear']"
            );

    // check for docs that appear more than once in a range

    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"val_s\">apple</field><field name=\"val_s\">banana</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("val_s:[* TO *] OR  val_s:[* TO *]")
            ,"//*[@numFound='4']"
            );
    assertQ(req("val_s:[* TO *] AND  val_s:[* TO *]")
            ,"//*[@numFound='4']"
            );
    assertQ(req("val_s:[* TO *]")
            ,"//*[@numFound='4']"
            );


    // <delete><id>44</id></delete>

    assertU("<add overwritePending=\"true\" overwriteCommitted=\"true\"><doc><field name=\"id\">44</field><field name=\"text\">red riding hood</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:44 AND red")
            ,"//@numFound[.='1'] "
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:44 AND ride")
            ,"//@numFound[.='1']"
            );
    assertQ(req("id:44 AND blue")
            ,"//@numFound[.='0']"
            );

    // allow duplicates

    assertU("<delete><id>44</id></delete>");
    assertU("<add allowDups=\"true\" overwriteCommitted=\"false\" overwritePending=\"false\"><doc><field name=\"id\">44</field><field name=\"text\">red riding hood</field></doc></add>");
    assertU("<add allowDups=\"true\" overwriteCommitted=\"false\" overwritePending=\"false\"><doc><field name=\"id\">44</field><field name=\"text\">big bad wolf</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:44")
            ,"//@numFound[.='2']"
            );
    assertQ(req("id:44 AND red")
            ,"//@numFound[.='1'] "
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:44 AND wolf")
            ,"//@numFound[.='1'] "
            ,"*[count(//doc)=1]"
            );
    assertQ(req("+id:44 red wolf")
            ,"//@numFound[.='2']"
            );

    // test removal of multiples w/o adding anything else

    assertU("<delete><id>44</id></delete>");
    assertU("<commit/>");
    assertQ(req("id:44")
            ,"//@numFound[.='0']"
            );

    // untokenized string type

    assertU("<delete><id>44</id></delete>");
    assertU("<add><doc><field name=\"id\">44</field><field name=\"ssto\">and a 10.4 ?</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:44")
            ,"//str[.='and a 10.4 ?']"
            );
    assertU("<delete><id>44</id></delete>");
    assertU("<add><doc><field name=\"id\">44</field><field name=\"sind\">abc123</field></doc></add>");
    assertU("<commit/>");
    // TODO: how to search for something with spaces....

    assertQ(req("sind:abc123")
            ,"//@numFound[.='1'] "
            ,"*[count(//@name[.='sind'])=0] "
            ,"*[count(//@name[.='id'])=1]"
            );

    assertU("<delete><id>44</id></delete>");
    assertU("<delete><id>44</id></delete>");
    assertU("<add><doc><field name=\"id\">44</field><field name=\"sindsto\">abc123</field></doc></add>");
    assertU("<commit/>");
    // TODO: how to search for something with spaces....

    assertQ(req("sindsto:abc123")
            ,"//str[.='abc123']"
            );

    // test output of multivalued fields

    assertU("<delete><id>44</id></delete>");
    assertU("<add><doc><field name=\"id\">44</field><field name=\"title\">yonik3</field><field name=\"title\" boost=\"2\">yonik4</field></doc></add>");
    assertU("<commit></commit>");
    assertQ(req("id:44")
            ,"//arr[@name='title'][./str='yonik3' and ./str='yonik4'] "
            ,"*[count(//@name[.='title'])=1]"
            );
    assertQ(req("title:yonik3")
            ,"//@numFound[.>'0']"
            );
    assertQ(req("title:yonik4")
            ,"//@numFound[.>'0']"
            );
    assertQ(req("title:yonik5")
            ,"//@numFound[.='0']"
            );
    assertU("<delete><query>title:yonik4</query></delete>");
    assertU("<commit/>");
    assertQ(req("id:44")
            ,"//@numFound[.='0']"
            );


    // not visible until commit

    assertU("<delete><id>44</id></delete>");
    assertU("<commit/>");
    assertU("<add><doc><field name=\"id\">44</field></doc></add>");
    assertQ(req("id:44")
            ,"//@numFound[.='0']"
            );
    assertU("<commit/>");
    assertQ(req("id:44")
            ,"//@numFound[.='1']"
            );

    // test configurable stop words

    assertU("<delete><id>44</id></delete>");
    assertU("<add><doc><field name=\"id\">44</field><field name=\"teststop\">world stopworda view</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("+id:44 +teststop:world")
            ,"//@numFound[.='1']"
            );
    assertQ(req("teststop:stopworda")
            ,"//@numFound[.='0']"
            );

    // test ignoreCase stop words

    assertU("<delete><id>44</id></delete>");
    assertU("<add><doc><field name=\"id\">44</field><field name=\"stopfilt\">world AnD view</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("+id:44 +stopfilt:world")
            ,"//@numFound[.='1']"
            );
    assertQ(req("stopfilt:\"and\"")
            ,"//@numFound[.='0']"
            );
    assertQ(req("stopfilt:\"AND\"")
            ,"//@numFound[.='0']"
            );
    assertQ(req("stopfilt:\"AnD\"")
            ,"//@numFound[.='0']"
            );

    // test dynamic field types

    assertU("<delete fromPending=\"true\" fromCommitted=\"true\"><id>44</id></delete>");
    assertU("<add><doc><field name=\"id\">44</field><field name=\"gack_i\">51778</field><field name=\"t_name\">cats</field></doc></add>");
    assertU("<commit/>");
    // test if the dyn fields got added

    assertQ(req("id:44")
            ,"*[count(//doc/*)>=3]  "
            ,"//int[@name='gack_i'][.='51778']  "
            ,"//str[@name='t_name'][.='cats']"
            );
    // now test if we can query by a dynamic field (requires analyzer support)

    assertQ(req("t_name:cat")
            ,"//str[@name='t_name' and .='cats']"
            );
    // check that deleteByQuery works for dynamic fields

    assertU("<delete><query>t_name:cat</query></delete>");
    assertU("<commit/>");
    assertQ(req("t_name:cat")
            ,"//@numFound[.='0']"
            );

    // test that longest dynamic field match happens first

    assertU("<add><doc><field name=\"id\">44</field><field name=\"xaa\">mystr</field><field name=\"xaaa\">12321</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:44")
            ,"//str[@name='xaa'][.='mystr']  "
            ,"//int[@name='xaaa'][.='12321']"
            );


    // test integer ranges and sorting

    assertU("<delete><id>44</id></delete>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_i1\">1234567890</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_i1\">10</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_i1\">1</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_i1\">2</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_i1\">15</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_i1\">-1</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_i1\">-987654321</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_i1\">2147483647</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_i1\">-2147483648</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_i1\">0</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:44")
            ,"*[count(//doc)=10]"
            );
    assertQ(req("num_i1:2147483647")
            ,"//@numFound[.='1']  "
            ,"//int[.='2147483647']"
            );
    assertQ(req("num_i1:\"-2147483648\"")
            ,"//@numFound[.='1'] "
            ,"//int[.='-2147483648']"
            );
    assertQ(req("id:44;num_i1 asc;")
            ,"//doc[1]/int[.='-2147483648'] "
            ,"//doc[last()]/int[.='2147483647']"
            );
    assertQ(req("id:44;num_i1 desc;")
            ,"//doc[1]/int[.='2147483647'] "
            ,"//doc[last()]/int[.='-2147483648']"
            );
    assertQ(req("num_i1:[0 TO 9]")
            ,"*[count(//doc)=3]"
            );
    assertQ(req("num_i1:[-2147483648 TO 2147483647]")
            ,"*[count(//doc)=10]"
            );
    assertQ(req("num_i1:[-10 TO -1]")
            ,"*[count(//doc)=1]"
            );

    // test long ranges and sorting

    assertU("<delete><id>44</id></delete>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_l1\">1234567890</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_l1\">10</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_l1\">1</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_l1\">2</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_l1\">15</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_l1\">-1</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_l1\">-987654321</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_l1\">9223372036854775807</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_l1\">-9223372036854775808</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_l1\">0</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:44")
            ,"*[count(//doc)=10]"
            );
    assertQ(req("num_l1:9223372036854775807")
            ,"//@numFound[.='1'] "
            ,"//long[.='9223372036854775807']"
            );
    assertQ(req("num_l1:\"-9223372036854775808\"")
            ,"//@numFound[.='1'] "
            ,"//long[.='-9223372036854775808']"
            );
    assertQ(req("id:44;num_l1 asc;")
            ,"//doc[1]/long[.='-9223372036854775808'] "
            ,"//doc[last()]/long[.='9223372036854775807']"
            );
    assertQ(req("id:44;num_l1 desc;")
            ,"//doc[1]/long[.='9223372036854775807'] "
            ,"//doc[last()]/long[.='-9223372036854775808']"
            );
    assertQ(req("num_l1:[-1 TO 9]")
            ,"*[count(//doc)=4]"
            );
    assertQ(req("num_l1:[-9223372036854775808 TO 9223372036854775807]")
            ,"*[count(//doc)=10]"
            );
    assertQ(req("num_l1:[-10 TO -1]")
            ,"*[count(//doc)=1]"
            );

    // test binary float ranges and sorting

    assertU("<delete><id>44</id></delete>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">1.4142135</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">Infinity</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">-Infinity</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">NaN</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">2</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">-1</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">-987654321</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">-999999.99</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">-1e20</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">0</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:44")
            ,"*[count(//doc)=10]"
            );
    assertQ(req("num_sf1:Infinity")
            ,"//@numFound[.='1']  "
            ,"//float[.='Infinity']"
            );
    assertQ(req("num_sf1:\"-Infinity\"")
            ,"//@numFound[.='1']  "
            ,"//float[.='-Infinity']"
            );
    assertQ(req("num_sf1:\"NaN\"")
            ,"//@numFound[.='1']  "
            ,"//float[.='NaN']"
            );
    assertQ(req("num_sf1:\"-1e20\"")
            ,"//@numFound[.='1']"
            );
    assertQ(req("id:44;num_sf1 asc;")
            ,"//doc[1]/float[.='-Infinity'] "
            ,"//doc[last()]/float[.='NaN']"
            );
    assertQ(req("id:44;num_sf1 desc;")
            ,"//doc[1]/float[.='NaN'] "
            ,"//doc[last()]/float[.='-Infinity']"
            );
    assertQ(req("num_sf1:[-1 TO 2]")
            ,"*[count(//doc)=4]"
            );
    assertQ(req("num_sf1:[-Infinity TO Infinity]")
            ,"*[count(//doc)=9]"
            );



    // test binary double ranges and sorting

    assertU("<delete><id>44</id></delete>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">1.4142135</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">Infinity</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">-Infinity</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">NaN</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">2</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">-1</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">1e-100</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">-999999.99</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">-1e100</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">0</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:44")
            ,"*[count(//doc)=10]"
            );
    assertQ(req("num_sd1:Infinity")
            ,"//@numFound[.='1']  "
            ,"//double[.='Infinity']"
            );
    assertQ(req("num_sd1:\"-Infinity\"")
            ,"//@numFound[.='1']  "
            ,"//double[.='-Infinity']"
            );
    assertQ(req("num_sd1:\"NaN\"")
            ,"//@numFound[.='1']  "
            ,"//double[.='NaN']"
            );
    assertQ(req("num_sd1:\"-1e100\"")
            ,"//@numFound[.='1']"
            );
    assertQ(req("num_sd1:\"1e-100\"")
            ,"//@numFound[.='1']"
            );
    assertQ(req("id:44;num_sd1 asc;")
            ,"//doc[1]/double[.='-Infinity'] "
            ,"//doc[last()]/double[.='NaN']"
            );
    assertQ(req("id:44;num_sd1 desc;")
            ,"//doc[1]/double[.='NaN'] "
            ,"//doc[last()]/double[.='-Infinity']"
            );
    assertQ(req("num_sd1:[-1 TO 2]")
            ,"*[count(//doc)=5]"
            );
    assertQ(req("num_sd1:[-Infinity TO Infinity]")
            ,"*[count(//doc)=9]"
            );


    // test sorting on multiple fields

    assertU("<delete><id>44</id></delete>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"a_i1\">10</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"a_i1\">1</field><field name=\"b_i1\">100</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"a_i1\">-1</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"a_i1\">15</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"a_i1\">1</field><field name=\"b_i1\">50</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id\">44</field><field name=\"a_i1\">0</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:44")
            ,"*[count(//doc)=6]"
            );

    assertQ(req("id:44; a_i1 asc,b_i1 desc")
            ,"*[count(//doc)=6] "
            ,"//doc[3]/int[.='100'] "
            ,"//doc[4]/int[.='50']"
            );
    assertQ(req("id:44;a_i1 asc  , b_i1 asc;")
            ,"*[count(//doc)=6] "
            ,"//doc[3]/int[.='50'] "
            ,"//doc[4]/int[.='100']"
            );
    assertQ(req("id:44;a_i1 asc;")
            ,"*[count(//doc)=6] "
            ,"//doc[1]/int[.='-1'] "
            ,"//doc[last()]/int[.='15']"
            );
    assertQ(req("id:44;a_i1 asc , score top;")
            ,"*[count(//doc)=6] "
            ,"//doc[1]/int[.='-1'] "
            ,"//doc[last()]/int[.='15']"
            );
    assertQ(req("id:44; score top , a_i1 top, b_i1 bottom ;")
            ,"*[count(//doc)=6] "
            ,"//doc[last()]/int[.='-1'] "
            ,"//doc[1]/int[.='15'] "
            ,"//doc[3]/int[.='50'] "
            ,"//doc[4]/int[.='100']"
            );


    // test sorting  with some docs missing the sort field

    assertU("<delete><query>id_i:[1000 TO 1010]</query></delete>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id_i\">1000</field><field name=\"a_i1\">1</field><field name=\"nullfirst\">Z</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id_i\">1001</field><field name=\"a_i1\">10</field><field name=\"nullfirst\">A</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id_i\">1002</field><field name=\"a_i1\">1</field><field name=\"b_si\">100</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id_i\">1003</field><field name=\"a_i1\">-1</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id_i\">1004</field><field name=\"a_i1\">15</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id_i\">1005</field><field name=\"a_i1\">1</field><field name=\"b_si\">50</field></doc></add>");
    assertU("<add allowDups=\"true\"><doc><field name=\"id_i\">1006</field><field name=\"a_i1\">0</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id_i:[1000 TO 1010]")
            ,"*[count(//doc)=7]"
            );
    assertQ(req("id_i:[1000 TO 1010]; b_si asc")
            ,"*[count(//doc)=7] "
            ,"//doc[1]/int[.='50'] "
            ,"//doc[2]/int[.='100']"
            );
    assertQ(req("id_i:[1000 TO 1010]; b_si desc")
            ,"*[count(//doc)=7] "
            ,"//doc[1]/int[.='100'] "
            ,"//doc[2]/int[.='50']"
            );
    assertQ(req("id_i:[1000 TO 1010]; a_i1 asc,b_si desc")
            ,"*[count(//doc)=7] "
            ,"//doc[3]/int[.='100'] "
            ,"//doc[4]/int[.='50']  "
            ,"//doc[5]/int[.='1000']"
            );
    assertQ(req("id_i:[1000 TO 1010]; a_i1 asc,b_si asc")
            ,"*[count(//doc)=7] "
            ,"//doc[3]/int[.='50'] "
            ,"//doc[4]/int[.='100']  "
            ,"//doc[5]/int[.='1000']"
            );
    // nullfirst tests
    assertQ(req("id_i:[1000 TO 1002]; nullfirst asc")
            ,"*[count(//doc)=3] "
            ,"//doc[1]/int[.='1002']"
            ,"//doc[2]/int[.='1001']  "
            ,"//doc[3]/int[.='1000']"
            );
    assertQ(req("id_i:[1000 TO 1002]; nullfirst desc")
            ,"*[count(//doc)=3] "
            ,"//doc[1]/int[.='1002']"
            ,"//doc[2]/int[.='1000']  "
            ,"//doc[3]/int[.='1001']"
            );

    ignoreException("shouldbeunindexed");
    ignoreException("nullfirst");
    ignoreException("abcde12345");
    ignoreException("aaa");

    // Sort parsing exception tests.  (SOLR-6, SOLR-99)
    assertQEx( "can not sort unindexed fields",
        req( "id_i:1000; shouldbeunindexed asc" ), 400 );
    
    assertQEx( "invalid query format",
        req( "id_i:1000; nullfirst" ), 400 );

    assertQEx( "unknown sort field",
        req( "id_i:1000; abcde12345 asc" ), 400 ); 

    assertQEx( "unknown sort order",
        req( "id_i:1000; nullfirst aaa" ), 400 );

    resetExceptionIgnores();

        
    // test prefix query

    assertU("<delete><query>val_s:[* TO *]</query></delete>");
    assertU("<add><doc><field name=\"id\">100</field><field name=\"val_s\">apple</field></doc></add>");
    assertU("<add><doc><field name=\"id\">101</field><field name=\"val_s\">banana</field></doc></add>");
    assertU("<add><doc><field name=\"id\">102</field><field name=\"val_s\">apple</field></doc></add>");
    assertU("<add><doc><field name=\"id\">103</field><field name=\"val_s\">pearing</field></doc></add>");
    assertU("<add><doc><field name=\"id\">104</field><field name=\"val_s\">pear</field></doc></add>");
    assertU("<add><doc><field name=\"id\">105</field><field name=\"val_s\">appalling</field></doc></add>");
    assertU("<add><doc><field name=\"id\">106</field><field name=\"val_s\">pearson</field></doc></add>");
    assertU("<add><doc><field name=\"id\">107</field><field name=\"val_s\">port</field></doc></add>");
    assertU("<commit/>");

    assertQ(req("val_s:a*")
            ,"//*[@numFound='3']"
            );
    assertQ(req("val_s:p*")
            ,"//*[@numFound='4']"
            );
    // val_s:* %//*[@numFound="8"]

    // test wildcard query
    assertQ(req("val_s:a*p*") ,"//*[@numFound='3']");
    assertQ(req("val_s:p?a*") ,"//*[@numFound='3']");

    assertU("<delete><query>id:[100 TO 110]</query></delete>");

    // test copyField functionality

    assertU("<add><doc><field name=\"id\">42</field><field name=\"title\">How Now4 brown Cows</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:42 AND title:Now")
            ,"*[count(//doc)=0]"
            );
    assertQ(req("id:42 AND title_lettertok:Now")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND title:cow")
            ,"*[count(//doc)=0]"
            );
    assertQ(req("id:42 AND title_stemmed:cow")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND text:cow")
            ,"*[count(//doc)=1]"
            );

    // test copyField functionality with a pattern.

    assertU("<add><doc><field name=\"id\">42</field><field name=\"copy_t\">Copy me to the text field pretty please.</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:42 AND text:pretty")
        ,"*[count(//doc)=1]"
        );
    assertQ(req("id:42 AND copy_t:pretty")
        ,"*[count(//doc)=1]"
        );
    
    // test slop

    assertU("<add><doc><field name=\"id\">42</field><field name=\"text\">foo bar</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:42 AND text:\"foo bar\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND text:\"foo\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND text:\"bar\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND text:\"bar foo\"")
            ,"*[count(//doc)=0]"
            );
    assertQ(req("id:42 AND text:\"bar foo\"~2")
            ,"*[count(//doc)=1]"
            );


    // intra-word delimiter testing (WordDelimiterFilter)

    assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">foo bar</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:42 AND subword:\"foo bar\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"foo\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"bar\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"bar foo\"")
            ,"*[count(//doc)=0]"
            );
    assertQ(req("id:42 AND subword:\"bar foo\"~2")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"foo/bar\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"foobar\"")
            ,"*[count(//doc)=0]"
            );

    assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">foo-bar</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:42 AND subword:\"foo bar\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"foo\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"bar\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"bar foo\"")
            ,"*[count(//doc)=0]"
            );
    assertQ(req("id:42 AND subword:\"bar foo\"~2")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"foo/bar\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:foobar")
            ,"*[count(//doc)=1]"
            );

    assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">Canon PowerShot SD500 7MP</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:42 AND subword:\"power-shot\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"power shot sd 500\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"powershot\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"SD-500\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"SD500\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"SD500-7MP\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"PowerShotSD500-7MP\"")
            ,"*[count(//doc)=1]"
            );

    assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">Wi-Fi</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:42 AND subword:wifi")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:wi+=fi")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:wi+=fi")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:WiFi")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"wi fi\"")
            ,"*[count(//doc)=1]"
            );

    assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">'I.B.M' A's,B's,C's</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:42 AND subword:\"'I.B.M.'\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:I.B.M")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:IBM")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:I--B--M")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"I B M\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:IBM's")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"IBM'sx\"")
            ,"*[count(//doc)=0]"
            );

    // this one fails since IBM and ABC are separated by two tokens

    // id:42 AND subword:IBM's-ABC's  %*[count(//doc)=1]

    assertQ(req("id:42 AND subword:\"IBM's-ABC's\"~2")
            ,"*[count(//doc)=1]"
            );

    assertQ(req("id:42 AND subword:\"A's B's-C's\"")
            ,"*[count(//doc)=1]"
            );

    assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">Sony KDF-E50A10</field></doc></add>");
    assertU("<commit/>");

    // check for exact match:

    //  Sony KDF E/KDFE 50 A 10  (this is how it's indexed)

    //  Sony KDF E      50 A 10  (and how it's queried)

    assertQ(req("id:42 AND subword:\"Sony KDF-E50A10\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:10")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:Sony")
            ,"*[count(//doc)=1]"
            );

    // this one fails without slop since Sony and KDFE have a token inbetween

    // id:42 AND subword:SonyKDFE50A10  %*[count(//doc)=1]

    assertQ(req("id:42 AND subword:\"SonyKDFE50A10\"~10")
            ,"*[count(//doc)=1]"
            );

    assertQ(req("id:42 AND subword:\"Sony KDF E-50-A-10\"")
            ,"*[count(//doc)=1]"
            );

    assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">http://www.yahoo.com</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:42 AND subword:yahoo")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:www.yahoo.com")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:http\\://www.yahoo.com")
            ,"*[count(//doc)=1]"
            );

    assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">--Q 1-- W2 E-3 Ok xY 4R 5-T *6-Y- 7-8-- 10A-B</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:42 AND subword:Q")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:1")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"w 2\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"e 3\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"o k\"")
            ,"*[count(//doc)=0]"
            );
    assertQ(req("id:42 AND subword:\"ok\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"x y\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"xy\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"4 r\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"5 t\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"5 t\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"6 y\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"7 8\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"78\"")
            ,"*[count(//doc)=1]"
            );
    assertQ(req("id:42 AND subword:\"10 A+B\"")
            ,"*[count(//doc)=1]"
            );

    assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">FooBarBaz</field></doc></add>");
    assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">FooBar10</field></doc></add>");
    assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">10FooBar</field></doc></add>");
    assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">BAZ</field></doc></add>");
    assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">10</field></doc></add>");
    assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">Mark, I found what's the problem! It turns to be from the latest schema. I found tons of exceptions in the resin.stdout that prevented the builder from performing. It's all coming from the WordDelimiterFilter which was just added to the latest schema: [2005-08-29 15:11:38.375] java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 673804 [2005-08-29 15:11:38.375]  at java.util.ArrayList.RangeCheck(ArrayList.java:547) 673805 [2005-08-29 15:11:38.375]  at java.util.ArrayList.get(ArrayList.java:322) 673806 [2005-08-29 15:11:38.375]  at solr.analysis.WordDelimiterFilter.addCombos(WordDelimiterFilter.java:349) 673807 [2005-08-29 15:11:38.375]  at solr.analysis.WordDelimiterFilter.next(WordDelimiterFilter.java:325) 673808 [2005-08-29 15:11:38.375]  at org.apache.lucene.analysis.LowerCaseFilter.next(LowerCaseFilter.java:32) 673809 [2005-08-29 15:11:38.375]  at org.apache.lucene.analysis.StopFilter.next(StopFilter.java:98) 673810 [2005-08-29 15:11:38.375]  at solr.EnglishPorterFilter.next(TokenizerFactory.java:163) 673811 [2005-08-29 15:11:38.375]  at org.apache.lucene.index.DocumentWriter.invertDocument(DocumentWriter.java:143) 673812 [2005-08-29 15:11:38.375]  at org.apache.lucene.index.DocumentWriter.addDocument(DocumentWriter.java:81) 673813 [2005-08-29 15:11:38.375]  at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:307) 673814 [2005-08-29 15:11:38.375]  at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:294) 673815 [2005-08-29 15:11:38.375]  at solr.DirectUpdateHandler2.doAdd(DirectUpdateHandler2.java:170) 673816 [2005-08-29 15:11:38.375]  at solr.DirectUpdateHandler2.overwriteBoth(DirectUpdateHandler2.java:317) 673817 [2005-08-29 15:11:38.375]  at solr.DirectUpdateHandler2.addDoc(DirectUpdateHandler2.java:191) 673818 [2005-08-29 15:11:38.375]  at solr.SolrCore.update(SolrCore.java:795) 673819 [2005-08-29 15:11:38.375]  at solrserver.SolrServlet.doPost(SolrServlet.java:71) 673820 [2005-08-29 15:11:38.375]  at javax.servlet.http.HttpServlet.service(HttpServlet.java:154) 673821 [2005-08-29 15:11:38.375]  at javax.servlet.http.HttpServlet.service(HttpServlet.java:92) 673822 [2005-08-29 15:11:38.375]  at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:99) 673823 [2005-08-29 15:11:38.375]  at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:188) 673824 [2005-08-29 15:11:38.375]  at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:163) 673825 [2005-08-29 15:11:38.375]  at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:208) 673826 [2005-08-29 15:11:38.375]  at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:259) 673827 [2005-08-29 15:11:38.375]  at com.caucho.server.port.TcpConnection.run(TcpConnection.java:363) 673828 [2005-08-29 15:11:38.375]  at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:490) 673829 [2005-08-29 15:11:38.375]  at com.caucho.util.ThreadPool.run(ThreadPool.java:423) 673830 [2005-08-29 15:11:38.375]  at java.lang.Thread.run(Thread.java:595) With the previous schema I'm able to perform a successful full build: http://c12-ssa-dev40-so-mas1.cnet.com:5078/select/?stylesheet=q=docTypeversion=2.0start=0rows=10indent=on Do you want to rollback to the previous schema version</field></doc></add>");


    // 

    assertU("<delete fromPending=\"true\" fromCommitted=\"true\"><id>44</id></delete>");
    assertU("<add><doc><field name=\"id\">44</field><field name=\"fname_s\">Yonik</field><field name=\"here_b\">true</field><field name=\"iq_l\">10000000000</field><field name=\"description_t\">software engineer</field><field name=\"ego_d\">1e100</field><field name=\"pi_f\">3.1415962</field><field name=\"when_dt\">2005-03-18T01:14:34Z</field><field name=\"arr_f\">1.414213562</field><field name=\"arr_f\">.999</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:44")
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    args.put("fl","fname_s,arr_f  ");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44",
                                    "standard", 0, 10, args);
    assertQ(req
            ,"//str[.='Yonik']  "
            ,"//float[.='1.4142135']"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    args.put("fl","  ");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44",
                                    "standard", 0, 10, args);
    assertQ(req
            ,"//str[.='Yonik']  "
            ,"//float[.='1.4142135']"
            );

    // test addition of score field

    args = new HashMap<String,String>();
    args.put("version","2.0");
    args.put("fl","score ");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44",
                                    "standard", 0, 10, args);
    assertQ(req
            ,"//str[.='Yonik']  "
            ,"//float[.='1.4142135'] "
            ,"//float[@name='score'] "
            ,"*[count(//doc/*)>=13]"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    args.put("fl","*,score ");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44",
                                    "standard", 0, 10, args);
    assertQ(req
            ,"//str[.='Yonik']  "
            ,"//float[.='1.4142135'] "
            ,"//float[@name='score'] "
            ,"*[count(//doc/*)>=13]"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    args.put("fl","* ");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44",
                                    "standard", 0, 10, args);
    assertQ(req
            ,"//str[.='Yonik']  "
            ,"//float[.='1.4142135'] "
            ,"*[count(//doc/*)>=12]"
            );

    // test maxScore

    args = new HashMap<String,String>();
    args.put("version","2.0");
    args.put("fl","score ");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44",
                                    "standard", 0, 10, args);
    assertQ(req
            ,"//result[@maxScore>0]"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    args.put("fl","score ");
    args.put("defType","lucenePlusSort");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44;id desc;",
                                    "standard", 0, 10, args);
    assertQ(req
            ,"//result[@maxScore>0]"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    args.put("fl","score ");
    args.put("defType","lucenePlusSort");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44;",
                                    "standard", 0, 10, args);
    assertQ(req
            ,"//@maxScore = //doc/float[@name='score']"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    args.put("fl","score ");
    args.put("defType","lucenePlusSort");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44;id desc;",
                                    "standard", 0, 10, args);
    assertQ(req
            ,"//@maxScore = //doc/float[@name='score']"
            );
    args = new HashMap<String,String>();
    args.put("version","2.0");
    args.put("fl","score");
    args.put("defType","lucenePlusSort");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44;id desc;",
                                    "standard", 0, 0 , args);
    assertQ(req
            ,"//result[@maxScore>0]"
            );


    //  test schema field attribute inheritance and overriding

    assertU("<delete><id>44</id></delete>");
    assertU("<add><doc><field name=\"id\">44</field><field name=\"shouldbestored\">hi</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:44")
            ,"//*[@name='shouldbestored']"
            );
    assertQ(req("+id:44 +shouldbestored:hi")
            ,"//*[@numFound='1']"
            );

    assertU("<delete><id>44</id></delete>");
    assertU("<add><doc><field name=\"id\">44</field><field name=\"shouldbeunstored\">hi</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:44")
            ,"not(//*[@name='shouldbeunstored'])"
            );
    assertQ(req("+id:44 +shouldbeunstored:hi")
            ,"//*[@numFound='1']"
            );

    assertU("<delete><id>44</id></delete>");
    assertU("<add><doc><field name=\"id\">44</field><field name=\"shouldbeunindexed\">hi</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:44")
            ,"//*[@name='shouldbeunindexed']"
            );
    //  this should result in an error... how to check for that?

    // +id:44 +shouldbeunindexed:hi %//*[@numFound="0"]


    // test spaces between XML elements because that can introduce extra XML events that

    // can mess up parsing (and it has in the past)

    assertU("  <delete>  <id>44</id>  </delete>");
    assertU("  <add>  <doc>  <field name=\"id\">44</field>  <field name=\"shouldbestored\">hi</field>  </doc>  </add>");
    assertU("  <commit />");

    // test adding multiple docs per add command

    // assertU("<delete><query>id:[0 TO 99]</query></delete>");
    // assertU("<add><doc><field name=\"id\">1</field></doc><doc><field name=\"id\">2</field></doc></add>");
    // assertU("<commit/>");
    // assertQ(req("id:[0 TO 99]")
    // ,"//*[@numFound='2']"
    // );

    // test synonym filter

    assertU("<delete><query>id:[10 TO 100]</query></delete>");
    assertU("<add><doc><field name=\"id\">10</field><field name=\"syn\">a</field></doc></add>");
    assertU("<add><doc><field name=\"id\">11</field><field name=\"syn\">b</field></doc></add>");
    assertU("<add><doc><field name=\"id\">12</field><field name=\"syn\">c</field></doc></add>");
    assertU("<add><doc><field name=\"id\">13</field><field name=\"syn\">foo</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:10 AND syn:a")
            ,"//*[@numFound='1']"
            );
    assertQ(req("id:10 AND syn:aa")
            ,"//*[@numFound='1']"
            );
    assertQ(req("id:11 AND syn:b")
            ,"//*[@numFound='1']"
            );
    assertQ(req("id:11 AND syn:b1")
            ,"//*[@numFound='1']"
            );
    assertQ(req("id:11 AND syn:b2")
            ,"//*[@numFound='1']"
            );
    assertQ(req("id:12 AND syn:c")
            ,"//*[@numFound='1']"
            );
    assertQ(req("id:12 AND syn:c1")
            ,"//*[@numFound='1']"
            );
    assertQ(req("id:12 AND syn:c2")
            ,"//*[@numFound='1']"
            );
    assertQ(req("id:13 AND syn:foo")
            ,"//*[@numFound='1']"
            );
    assertQ(req("id:13 AND syn:bar")
            ,"//*[@numFound='1']"
            );
    assertQ(req("id:13 AND syn:baz")
            ,"//*[@numFound='1']"
            );


    // test position increment gaps between field values

    assertU("<delete><id>44</id></delete>");
    assertU("<delete><id>45</id></delete>");
    assertU("<add><doc><field name=\"id\">44</field><field name=\"textgap\">aa bb cc</field><field name=\"textgap\">dd ee ff</field></doc></add>");
    assertU("<add><doc><field name=\"id\">45</field><field name=\"text\">aa bb cc</field><field name=\"text\">dd ee ff</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("+id:44 +textgap:\"aa bb cc\"")
            ,"//*[@numFound='1']"
            );
    assertQ(req("+id:44 +textgap:\"dd ee ff\"")
            ,"//*[@numFound='1']"
            );
    assertQ(req("+id:44 +textgap:\"cc dd\"")
            ,"//*[@numFound='0']"
            );
    assertQ(req("+id:44 +textgap:\"cc dd\"~100")
            ,"//*[@numFound='1']"
            );
    assertQ(req("+id:44 +textgap:\"bb cc dd ee\"~90")
            ,"//*[@numFound='0']"
            );
    assertQ(req("+id:44 +textgap:\"bb cc dd ee\"~100")
            ,"//*[@numFound='1']"
            );
    assertQ(req("+id:45 +text:\"cc dd\"")
            ,"//*[@numFound='1']"
            );


    // trigger output of custom value test

    args = new HashMap<String,String>();
    args.put("version","2.0");
    req = new LocalSolrQueryRequest(h.getCore(), "values",
                                    "test", 0, 10, args);
    assertQ(req
            );

  }
}
