mirror of https://github.com/apache/lucene.git
SOLR-6085: Suggester crashes when prefixToken is longer than surface form
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1638711 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
cc1b4bea5e
commit
a323091dac
|
@ -695,13 +695,15 @@ public class AnalyzingInfixSuggester extends Lookup implements Closeable {
|
||||||
protected void addPrefixMatch(StringBuilder sb, String surface, String analyzed, String prefixToken) {
|
protected void addPrefixMatch(StringBuilder sb, String surface, String analyzed, String prefixToken) {
|
||||||
// TODO: apps can try to invert their analysis logic
|
// TODO: apps can try to invert their analysis logic
|
||||||
// here, e.g. downcase the two before checking prefix:
|
// here, e.g. downcase the two before checking prefix:
|
||||||
|
if (prefixToken.length() >= surface.length()) {
|
||||||
|
addWholeMatch(sb, surface, analyzed);
|
||||||
|
return;
|
||||||
|
}
|
||||||
sb.append("<b>");
|
sb.append("<b>");
|
||||||
sb.append(surface.substring(0, prefixToken.length()));
|
sb.append(surface.substring(0, prefixToken.length()));
|
||||||
sb.append("</b>");
|
sb.append("</b>");
|
||||||
if (prefixToken.length() < surface.length()) {
|
|
||||||
sb.append(surface.substring(prefixToken.length()));
|
sb.append(surface.substring(prefixToken.length()));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean store(DataOutput in) throws IOException {
|
public boolean store(DataOutput in) throws IOException {
|
||||||
|
|
|
@ -41,9 +41,11 @@ import org.apache.lucene.search.BooleanClause;
|
||||||
import org.apache.lucene.search.suggest.Input;
|
import org.apache.lucene.search.suggest.Input;
|
||||||
import org.apache.lucene.search.suggest.InputArrayIterator;
|
import org.apache.lucene.search.suggest.InputArrayIterator;
|
||||||
import org.apache.lucene.search.suggest.Lookup.LookupResult;
|
import org.apache.lucene.search.suggest.Lookup.LookupResult;
|
||||||
|
import org.apache.lucene.store.Directory;
|
||||||
import org.apache.lucene.util.BytesRef;
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.apache.lucene.util.LuceneTestCase;
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
import org.apache.lucene.util.TestUtil;
|
import org.apache.lucene.util.TestUtil;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
public class AnalyzingInfixSuggesterTest extends LuceneTestCase {
|
public class AnalyzingInfixSuggesterTest extends LuceneTestCase {
|
||||||
|
|
||||||
|
@ -1076,4 +1078,28 @@ public class AnalyzingInfixSuggesterTest extends LuceneTestCase {
|
||||||
suggester.close();
|
suggester.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAddPrefixMatch() throws IOException {
|
||||||
|
Analyzer a = new MockAnalyzer(random(), MockTokenizer.WHITESPACE, false);
|
||||||
|
Directory dir = newDirectory();
|
||||||
|
AnalyzingInfixSuggester suggester = new AnalyzingInfixSuggester(dir, a);
|
||||||
|
|
||||||
|
assertEquals("<b>Sol</b>r", pfmToString(suggester, "Solr", "Sol"));
|
||||||
|
assertEquals("<b>Solr</b>", pfmToString(suggester, "Solr", "Solr"));
|
||||||
|
|
||||||
|
// Test SOLR-6085 - the analyzed tokens match due to ss->ß normalization
|
||||||
|
assertEquals("<b>daß</b>", pfmToString(suggester, "daß", "dass"));
|
||||||
|
|
||||||
|
dir.close();
|
||||||
|
suggester.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String pfmToString(AnalyzingInfixSuggester suggester, String surface, String prefix) throws IOException {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
suggester.addPrefixMatch(sb, surface, "", prefix);
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -400,6 +400,8 @@ Bug Fixes
|
||||||
|
|
||||||
* SOLR-6704: TrieDateField type drops schema properties in branch 4.10 (Tomás Fernández Löbbe)
|
* SOLR-6704: TrieDateField type drops schema properties in branch 4.10 (Tomás Fernández Löbbe)
|
||||||
|
|
||||||
|
* SOLR-6085: Suggester crashes when prefixToken is longer than surface form (janhoy)
|
||||||
|
|
||||||
================== 4.10.2 ==================
|
================== 4.10.2 ==================
|
||||||
|
|
||||||
Bug Fixes
|
Bug Fixes
|
||||||
|
|
Loading…
Reference in New Issue