/*
 * 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.common.params.CommonParams;
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<>();
    lrf.args.put(CommonParams.VERSION,"2.2");

    // 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 overwrite=\"true\"><doc><field name=\"id\">101</field></doc></add>");
    assertU("<add overwrite=\"true\"><doc><field name=\"id\">101</field></doc></add>");
    assertU("<add  overwrite=\"false\"><doc><field name=\"id\">105</field></doc></add>");
    assertU("<add overwrite=\"true\"><doc><field name=\"id\">102</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">103</field></doc></add>");
    assertU("<add overwrite=\"true\"><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 overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">apple</field><field name=\"val_s1\">apple</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">banana</field><field name=\"val_s1\">banana</field></doc></add>");
    assertU("<add overwrite=\"false\"><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<>();
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "/select", 2, 5 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=1] "
            ,"*//doc[1]/str[.='pear'] "
            ,"//*[@start='2']"
            );
    args = new HashMap<>();
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "/select", 3, 5 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<>();
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "/select", 4, 5 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<>();
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "/select", 25, 5 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<>();
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "/select", 0, 1 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=1] "
            ,"*//doc[1]/str[.='apple']"
            );
    args = new HashMap<>();
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "/select", 0, 2 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=2] "
            ,"*//doc[2]/str[.='banana']"
            );
    args = new HashMap<>();
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "/select", 1, 1 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=1] "
            ,"*//doc[1]/str[.='banana']"
            );
    args = new HashMap<>();
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "/select", 3, 1 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<>();
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "/select", 4, 1 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<>();
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "/select", 1, 0 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<>();
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "/select", 0, 0 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<>();
    args.put("sort","val_s1 asc");
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "/select", 0, 0 , args);
    assertQ(req
            ,"//*[@numFound='3'] "
            ,"*[count(//doc)=0]"
            );
    args = new HashMap<>();
    args.put("sort","val_s1 desc");
    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
                                    "/select", 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 overwrite=\"false\"><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><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 overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"text\">red riding hood</field></doc></add>");
    assertU("<add overwrite=\"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]  "
            ,"//arr[@name='gack_i']/int[.='51778']  "
            ,"//arr[@name='t_name']/str[.='cats']"
            );
    // now test if we can query by a dynamic field (requires analyzer support)

    assertQ(req("t_name:cat")
            ,"//arr[@name='t_name' and .='cats']/str"
            );
    // 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")
            ,"//arr[@name='xaa'][.='mystr']/str  "
            ,"//arr[@name='xaaa'][.='12321']/int"
            );


    // test integer ranges and sorting

    assertU("<delete><id>44</id></delete>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">1234567890</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">10</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">1</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">2</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">15</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">-1</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">-987654321</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">2147483647</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">-2147483648</field></doc></add>");
    assertU("<add overwrite=\"false\"><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("q", "id:44", "sort","num_i1 asc")
            ,"//doc[1]/int[.='-2147483648'] "
            ,"//doc[last()]/int[.='2147483647']"
            );
    assertQ(req("q","id:44","sort","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 overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">1234567890</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">10</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">1</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">2</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">15</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">-1</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">-987654321</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">9223372036854775807</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">-9223372036854775808</field></doc></add>");
    assertU("<add overwrite=\"false\"><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("q","id:44","sort","num_l1 asc")
            ,"//doc[1]/long[.='-9223372036854775808'] "
            ,"//doc[last()]/long[.='9223372036854775807']"
            );
    assertQ(req("q","id:44", "sort", "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 overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">1.4142135</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">Infinity</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">-Infinity</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">NaN</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">2</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">-1</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">-987654321</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">-999999.99</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">-1e20</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">0</field></doc></add>");
    assertU("<commit/>");
    assertQ(req("id:44")
            ,"*[count(//doc)=10]"
            );
    assertQ(req("num_f1:Infinity")
            ,"//@numFound[.='1']  "
            ,"//float[.='Infinity']"
            );
    assertQ(req("num_f1:\"-Infinity\"")
            ,"//@numFound[.='1']  "
            ,"//float[.='-Infinity']"
            );
    assertQ(req("num_f1:\"NaN\"")
            ,"//@numFound[.='1']  "
            ,"//float[.='NaN']"
            );
    assertQ(req("num_f1:\"-1e20\"")
            ,"//@numFound[.='1']"
            );
    assertQ(req("q", "id:44", "sort", "num_f1 asc")
            ,"//doc[1]/float[.='-Infinity'] "
            ,"//doc[last()]/float[.='NaN']"
            );
    assertQ(req("q", "id:44", "sort","num_f1 desc")
            ,"//doc[1]/float[.='NaN'] "
            ,"//doc[last()]/float[.='-Infinity']"
            );
    assertQ(req("num_f1:[-1 TO 2]")
            ,"*[count(//doc)=4]"
            );
    assertQ(req("num_f1:[-Infinity TO Infinity]")
            ,"*[count(//doc)=9]"
            );



    // test binary double ranges and sorting

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


    // test sorting on multiple fields

    assertU("<delete><id>44</id></delete>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">10</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">1</field><field name=\"b_i1\">100</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">-1</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">15</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">1</field><field name=\"b_i1\">50</field></doc></add>");
    assertU("<add overwrite=\"false\"><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("q","id:44", "sort", "a_i1 asc,b_i1 desc")
            ,"*[count(//doc)=6] "
            ,"//doc[3]/int[.='100'] "
            ,"//doc[4]/int[.='50']"
            );
    assertQ(req("q","id:44", "sort", "a_i1 asc  , b_i1 asc")
            ,"*[count(//doc)=6] "
            ,"//doc[3]/int[.='50'] "
            ,"//doc[4]/int[.='100']"
            );
    assertQ(req("q", "id:44", "sort", "a_i1 asc")
            ,"*[count(//doc)=6] "
            ,"//doc[1]/int[.='-1'] "
            ,"//doc[last()]/int[.='15']"
            );
    assertQ(req("q","id:44","sort","a_i1 asc , score top")
            ,"*[count(//doc)=6] "
            ,"//doc[1]/int[.='-1'] "
            ,"//doc[last()]/int[.='15']"
            );
    assertQ(req("q","id:44","sort","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 overwrite=\"false\"><doc><field name=\"id_i\">1000</field><field name=\"a_i1\">1</field><field name=\"nullfirst\">Z</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1001</field><field name=\"a_i1\">10</field><field name=\"nullfirst\">A</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1002</field><field name=\"a_i1\">1</field><field name=\"b_i1\">100</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1003</field><field name=\"a_i1\">-1</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1004</field><field name=\"a_i1\">15</field></doc></add>");
    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1005</field><field name=\"a_i1\">1</field><field name=\"b_i1\">50</field></doc></add>");
    assertU("<add overwrite=\"false\"><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("q","id_i:[1000 TO 1010]","sort","b_i1 asc")
            ,"*[count(//doc)=7] "
            ,"//doc[1]/int[.='50'] "
            ,"//doc[2]/int[.='100']"
            );
    assertQ(req("q","id_i:[1000 TO 1010]","sort"," b_i1 desc")
            ,"*[count(//doc)=7] "
            ,"//doc[1]/int[.='100'] "
            ,"//doc[2]/int[.='50']"
            );
    assertQ(req("q","id_i:[1000 TO 1010]","sort"," a_i1 asc,b_i1 desc")
            ,"*[count(//doc)=7] "
            ,"//doc[3]/int[@name='b_i1' and .='100'] "
            ,"//doc[4]/int[@name='b_i1' and .='50']  "
            ,"//doc[5]/arr[@name='id_i' and .='1000']"
            );
    assertQ(req("q","id_i:[1000 TO 1010]","sort"," a_i1 asc,b_i1 asc")
            ,"*[count(//doc)=7] "
            ,"//doc[3]/int[@name='b_i1' and .='50'] "
            ,"//doc[4]/int[@name='b_i1' and .='100']  "
            ,"//doc[5]/arr[@name='id_i' and .='1000']"
            );
    // nullfirst tests
    assertQ(req("q","id_i:[1000 TO 1002]","sort"," nullfirst asc")
            ,"*[count(//doc)=3] "
            ,"//doc[1]/arr[@name='id_i' and .='1002']"
            ,"//doc[2]/arr[@name='id_i' and .='1001']  "
            ,"//doc[3]/arr[@name='id_i' and .='1000']"
            );
    assertQ(req("q","id_i:[1000 TO 1002]","sort"," nullfirst desc")
            ,"*[count(//doc)=3] "
            ,"//doc[1]/arr[@name='id_i' and .='1002']"
            ,"//doc[2]/arr[@name='id_i' and .='1000']  "
            ,"//doc[3]/arr[@name='id_i' and .='1001']"
            );

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

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

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

    assertQEx( "unknown sort order",
        req( "q","id_i:1000", "sort", "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 (WordDelimiterGraphFilter)

    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<>();
    args.put("fl","fname_s,arr_f  ");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44",
                                    "/select", 0, 10, args);
    assertQ(req
            ,"//str[.='Yonik']  "
            ,"//float[.='1.4142135']"
            );
    args = new HashMap<>();
    args.put("fl","fname_s,score");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44",
                                    "/select", 0, 10, args);
    assertQ(req
            ,"//str[.='Yonik']"
            ,"//float[@name='score' and . > 0]"
            );

    // test addition of score field

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

    // test maxScore

    args = new HashMap<>();
    args.put("fl","score ");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44",
                                    "/select", 0, 10, args);
    assertQ(req
            ,"//result[@maxScore>0]"
            );
    args = new HashMap<>();
    args.put("fl","score ");
    args.put("sort","id desc");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44",
                                    "/select", 0, 10, args);
    assertQ(req
            ,"//result[@maxScore>0]"
            );
    args = new HashMap<>();
    args.put("fl","score ");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44",
                                    "/select", 0, 10, args);
    assertQ(req
            ,"//@maxScore = //doc/float[@name='score']"
            );
    args = new HashMap<>();
    args.put("fl","score ");
    args.put("sort","id desc");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44",
                                    "/select", 0, 10, args);
    assertQ(req
            ,"//@maxScore = //doc/float[@name='score']"
            );
    args = new HashMap<>();
    args.put("fl","*,score");
    args.put("sort","id desc");
    req = new LocalSolrQueryRequest(h.getCore(), "id:44",
                                    "/select", 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']"
            );
  }
}
