mirror of https://github.com/apache/lucene.git
SOLR-8807: disable the CollapseQParser Plugin when testing spellcheck collations for hit-counts
This commit is contained in:
parent
caf329717e
commit
55e36615eb
|
@ -165,6 +165,9 @@ Bug Fixes
|
||||||
|
|
||||||
* SOLR-10264: Fixes multi-term synonym parsing in ManagedSynonymFilterFactory.
|
* SOLR-10264: Fixes multi-term synonym parsing in ManagedSynonymFilterFactory.
|
||||||
(Jörg Rathlev, Steve Rowe, Christine Poerschke)
|
(Jörg Rathlev, Steve Rowe, Christine Poerschke)
|
||||||
|
|
||||||
|
* SOLR-8807: fix Spellcheck "collateMaxCollectDocs" parameter to work with queries that have the
|
||||||
|
CollpasingQParserPlugin applied. (James Dyer)
|
||||||
|
|
||||||
Other Changes
|
Other Changes
|
||||||
----------------------
|
----------------------
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package org.apache.solr.spelling;
|
package org.apache.solr.spelling;
|
||||||
|
import static org.apache.solr.common.params.CommonParams.ID;
|
||||||
|
|
||||||
import java.lang.invoke.MethodHandles;
|
import java.lang.invoke.MethodHandles;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
@ -41,8 +43,6 @@ import org.apache.solr.search.SolrIndexSearcher;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import static org.apache.solr.common.params.CommonParams.ID;
|
|
||||||
|
|
||||||
public class SpellCheckCollator {
|
public class SpellCheckCollator {
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
|
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
|
||||||
private int maxCollations = 1;
|
private int maxCollations = 1;
|
||||||
|
@ -132,6 +132,19 @@ public class SpellCheckCollator {
|
||||||
params.remove(DisMaxParams.BF);
|
params.remove(DisMaxParams.BF);
|
||||||
// Collate testing does not support Grouping (see SOLR-2577)
|
// Collate testing does not support Grouping (see SOLR-2577)
|
||||||
params.remove(GroupParams.GROUP);
|
params.remove(GroupParams.GROUP);
|
||||||
|
|
||||||
|
// Collate testing does not support the Collapse QParser (See SOLR-8807)
|
||||||
|
params.remove("expand");
|
||||||
|
String[] filters = params.getParams(CommonParams.FQ);
|
||||||
|
if (filters != null) {
|
||||||
|
List<String> filtersToApply = new ArrayList<>(filters.length);
|
||||||
|
for (String fq : filters) {
|
||||||
|
if (!fq.startsWith("{!collapse")) {
|
||||||
|
filtersToApply.add(fq);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
params.set("fq", filtersToApply.toArray(new String[filtersToApply.size()]));
|
||||||
|
}
|
||||||
|
|
||||||
// creating a request here... make sure to close it!
|
// creating a request here... make sure to close it!
|
||||||
ResponseBuilder checkResponse = new ResponseBuilder(
|
ResponseBuilder checkResponse = new ResponseBuilder(
|
||||||
|
|
|
@ -239,75 +239,14 @@ based HashBitset. -->
|
||||||
|
|
||||||
<searchComponent name="spellcheck" class="org.apache.solr.handler.component.SpellCheckComponent">
|
<searchComponent name="spellcheck" class="org.apache.solr.handler.component.SpellCheckComponent">
|
||||||
<!-- This is slightly different from the field value so we can test dealing with token offset changes -->
|
<!-- This is slightly different from the field value so we can test dealing with token offset changes -->
|
||||||
<str name="queryAnalyzerFieldType">lowerpunctfilt</str>
|
<str name="queryAnalyzerFieldType">a_s</str>
|
||||||
|
|
||||||
<lst name="spellchecker">
|
<lst name="spellchecker">
|
||||||
<str name="name">default</str>
|
|
||||||
<str name="field">lowerfilt</str>
|
|
||||||
<str name="spellcheckIndexDir">spellchecker1</str>
|
|
||||||
<str name="buildOnCommit">false</str>
|
|
||||||
</lst>
|
|
||||||
<lst name="spellchecker">
|
|
||||||
<str name="name">direct</str>
|
<str name="name">direct</str>
|
||||||
<str name="classname">DirectSolrSpellChecker</str>
|
<str name="classname">DirectSolrSpellChecker</str>
|
||||||
<str name="field">lowerfilt</str>
|
<str name="field">a_s</str>
|
||||||
<int name="minQueryLength">3</int>
|
<int name="minQueryLength">3</int>
|
||||||
</lst>
|
</lst>
|
||||||
<lst name="spellchecker">
|
|
||||||
<str name="name">wordbreak</str>
|
|
||||||
<str name="classname">solr.WordBreakSolrSpellChecker</str>
|
|
||||||
<str name="field">lowerfilt</str>
|
|
||||||
<str name="combineWords">true</str>
|
|
||||||
<str name="breakWords">true</str>
|
|
||||||
<int name="maxChanges">10</int>
|
|
||||||
</lst>
|
|
||||||
<lst name="spellchecker">
|
|
||||||
<str name="name">multipleFields</str>
|
|
||||||
<str name="field">lowerfilt1and2</str>
|
|
||||||
<str name="spellcheckIndexDir">spellcheckerMultipleFields</str>
|
|
||||||
<str name="buildOnCommit">false</str>
|
|
||||||
</lst>
|
|
||||||
<!-- Example of using different distance measure -->
|
|
||||||
<lst name="spellchecker">
|
|
||||||
<str name="name">jarowinkler</str>
|
|
||||||
<str name="field">lowerfilt</str>
|
|
||||||
<!-- Use a different Distance Measure -->
|
|
||||||
<str name="distanceMeasure">org.apache.lucene.search.spell.JaroWinklerDistance</str>
|
|
||||||
<str name="spellcheckIndexDir">spellchecker2</str>
|
|
||||||
|
|
||||||
</lst>
|
|
||||||
<lst name="spellchecker">
|
|
||||||
<str name="classname">solr.FileBasedSpellChecker</str>
|
|
||||||
<str name="name">external</str>
|
|
||||||
<str name="sourceLocation">spellings.txt</str>
|
|
||||||
<str name="characterEncoding">UTF-8</str>
|
|
||||||
<str name="spellcheckIndexDir">spellchecker3</str>
|
|
||||||
</lst>
|
|
||||||
<!-- Comparator -->
|
|
||||||
<lst name="spellchecker">
|
|
||||||
<str name="name">freq</str>
|
|
||||||
<str name="field">lowerfilt</str>
|
|
||||||
<str name="spellcheckIndexDir">spellcheckerFreq</str>
|
|
||||||
<!-- comparatorClass be one of:
|
|
||||||
1. score (default)
|
|
||||||
2. freq (Frequency first, then score)
|
|
||||||
3. A fully qualified class name
|
|
||||||
-->
|
|
||||||
<str name="comparatorClass">freq</str>
|
|
||||||
<str name="buildOnCommit">false</str>
|
|
||||||
</lst>
|
|
||||||
<lst name="spellchecker">
|
|
||||||
<str name="name">fqcn</str>
|
|
||||||
<str name="field">lowerfilt</str>
|
|
||||||
<str name="spellcheckIndexDir">spellcheckerFQCN</str>
|
|
||||||
<str name="comparatorClass">org.apache.solr.spelling.SampleComparator</str>
|
|
||||||
<str name="buildOnCommit">false</str>
|
|
||||||
</lst>
|
|
||||||
<lst name="spellchecker">
|
|
||||||
<str name="name">perDict</str>
|
|
||||||
<str name="classname">org.apache.solr.handler.component.DummyCustomParamSpellChecker</str>
|
|
||||||
<str name="field">lowerfilt</str>
|
|
||||||
</lst>
|
|
||||||
</searchComponent>
|
</searchComponent>
|
||||||
|
|
||||||
<searchComponent name="termsComp" class="org.apache.solr.handler.component.TermsComponent"/>
|
<searchComponent name="termsComp" class="org.apache.solr.handler.component.TermsComponent"/>
|
||||||
|
@ -323,19 +262,6 @@ based HashBitset. -->
|
||||||
-->
|
-->
|
||||||
<queryConverter name="queryConverter" class="org.apache.solr.spelling.SpellingQueryConverter"/>
|
<queryConverter name="queryConverter" class="org.apache.solr.spelling.SpellingQueryConverter"/>
|
||||||
|
|
||||||
<requestHandler name="spellCheckCompRH" class="org.apache.solr.handler.component.SearchHandler">
|
|
||||||
<lst name="defaults">
|
|
||||||
<!-- omp = Only More Popular -->
|
|
||||||
<str name="spellcheck.onlyMorePopular">false</str>
|
|
||||||
<!-- exr = Extended Results -->
|
|
||||||
<str name="spellcheck.extendedResults">false</str>
|
|
||||||
<!-- The number of suggestions to return -->
|
|
||||||
<str name="spellcheck.count">1</str>
|
|
||||||
</lst>
|
|
||||||
<arr name="last-components">
|
|
||||||
<str>spellcheck</str>
|
|
||||||
</arr>
|
|
||||||
</requestHandler>
|
|
||||||
<requestHandler name="spellCheckCompRH_Direct" class="org.apache.solr.handler.component.SearchHandler">
|
<requestHandler name="spellCheckCompRH_Direct" class="org.apache.solr.handler.component.SearchHandler">
|
||||||
<lst name="defaults">
|
<lst name="defaults">
|
||||||
<str name="spellcheck.dictionary">direct</str>
|
<str name="spellcheck.dictionary">direct</str>
|
||||||
|
@ -347,35 +273,6 @@ based HashBitset. -->
|
||||||
<str>spellcheck</str>
|
<str>spellcheck</str>
|
||||||
</arr>
|
</arr>
|
||||||
</requestHandler>
|
</requestHandler>
|
||||||
<requestHandler name="spellCheckWithWordbreak" class="org.apache.solr.handler.component.SearchHandler">
|
|
||||||
<lst name="defaults">
|
|
||||||
<str name="spellcheck.dictionary">default</str>
|
|
||||||
<str name="spellcheck.dictionary">wordbreak</str>
|
|
||||||
<str name="spellcheck.count">20</str>
|
|
||||||
</lst>
|
|
||||||
<arr name="last-components">
|
|
||||||
<str>spellcheck</str>
|
|
||||||
</arr>
|
|
||||||
</requestHandler>
|
|
||||||
<requestHandler name="spellCheckWithWordbreak_Direct" class="org.apache.solr.handler.component.SearchHandler">
|
|
||||||
<lst name="defaults">
|
|
||||||
<str name="spellcheck.dictionary">direct</str>
|
|
||||||
<str name="spellcheck.dictionary">wordbreak</str>
|
|
||||||
<str name="spellcheck.count">20</str>
|
|
||||||
</lst>
|
|
||||||
<arr name="last-components">
|
|
||||||
<str>spellcheck</str>
|
|
||||||
</arr>
|
|
||||||
</requestHandler>
|
|
||||||
<requestHandler name="spellCheckCompRH1" class="org.apache.solr.handler.component.SearchHandler">
|
|
||||||
<lst name="defaults">
|
|
||||||
<str name="defType">dismax</str>
|
|
||||||
<str name="qf">lowerfilt1^1</str>
|
|
||||||
</lst>
|
|
||||||
<arr name="last-components">
|
|
||||||
<str>spellcheck</str>
|
|
||||||
</arr>
|
|
||||||
</requestHandler>
|
|
||||||
|
|
||||||
<requestHandler name="mltrh" class="org.apache.solr.handler.component.SearchHandler">
|
<requestHandler name="mltrh" class="org.apache.solr.handler.component.SearchHandler">
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
/*
|
||||||
|
* 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.spelling;
|
||||||
|
|
||||||
|
import org.apache.solr.SolrTestCaseJ4;
|
||||||
|
import org.apache.solr.common.params.CommonParams;
|
||||||
|
import org.apache.solr.common.params.SpellingParams;
|
||||||
|
import org.apache.solr.handler.component.SpellCheckComponent;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class SpellCheckCollatorWithCollapseTest extends SolrTestCaseJ4 {
|
||||||
|
@BeforeClass
|
||||||
|
public static void beforeClass() throws Exception {
|
||||||
|
initCore("solrconfig-collapseqparser.xml", "schema11.xml");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Before
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
super.setUp();
|
||||||
|
clearIndex();
|
||||||
|
assertU(commit());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() throws Exception {
|
||||||
|
for(int i=0 ; i<200 ; i++) {
|
||||||
|
String[] doc = {"id","" + i, "group_i", "" + (i % 10), "a_s", ((i%2)==0 ? "love" : "peace")};
|
||||||
|
assertU(adoc(doc));
|
||||||
|
if(i%5==0) {
|
||||||
|
assertU(commit());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertU(commit());
|
||||||
|
assertQ(
|
||||||
|
req(
|
||||||
|
SpellCheckComponent.COMPONENT_NAME, "true",
|
||||||
|
SpellCheckComponent.SPELLCHECK_DICT, "direct",
|
||||||
|
SpellingParams.SPELLCHECK_COUNT, "10",
|
||||||
|
SpellingParams.SPELLCHECK_COLLATE, "true",
|
||||||
|
SpellingParams.SPELLCHECK_MAX_COLLATION_TRIES, "5",
|
||||||
|
SpellingParams.SPELLCHECK_MAX_COLLATIONS, "1",
|
||||||
|
CommonParams.Q, "a_s:lpve",
|
||||||
|
CommonParams.QT, "spellCheckCompRH_Direct",
|
||||||
|
SpellingParams.SPELLCHECK_COLLATE_MAX_COLLECT_DOCS, "5",
|
||||||
|
CommonParams.FQ, "{!collapse field=group_i}",
|
||||||
|
"expand", "true"),
|
||||||
|
"//lst[@name='spellcheck']/lst[@name='collations']/str[@name='collation']='a_s:love'");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue