Java 类org.apache.lucene.search.spans.SpanMultiTermQueryWrapper 实例源码
项目:Elasticsearch
文件:SpanMultiTermQueryParser.java
@Override
public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
XContentParser parser = parseContext.parser();
Token token = parser.nextToken();
if (!MATCH_NAME.equals(parser.currentName()) || token != XContentParser.Token.FIELD_NAME) {
throw new QueryParsingException(parseContext, "spanMultiTerm must have [" + MATCH_NAME + "] multi term query clause");
}
token = parser.nextToken();
if (token != XContentParser.Token.START_OBJECT) {
throw new QueryParsingException(parseContext, "spanMultiTerm must have [" + MATCH_NAME + "] multi term query clause");
}
Query subQuery = parseContext.parseInnerQuery();
if (!(subQuery instanceof MultiTermQuery)) {
throw new QueryParsingException(parseContext, "spanMultiTerm [" + MATCH_NAME + "] must be of type multi term query");
}
parser.nextToken();
return new SpanMultiTermQueryWrapper<>((MultiTermQuery) subQuery);
}
项目:Krill
文件:TestRegexIndex.java
@Test
public void testWildcardStarRewritten () throws IOException {
ki = new KrillIndex();
ki.addDoc(createFieldDoc1());
ki.commit();
// meine* /+w1:2,s0 &Erfahrung
// rewritten into meine.*
RegexpQuery wcquery = new RegexpQuery(new Term("tokens", "s:meine.*"));
SpanMultiTermQueryWrapper<RegexpQuery> mtq =
new SpanMultiTermQueryWrapper<RegexpQuery>(wcquery);
SpanMultipleDistanceQuery mdsq = new SpanMultipleDistanceQuery(
new SpanClassQuery(mtq, (byte) 129),
new SpanClassQuery(sq, (byte) 129), constraints, true, true);
kr = ki.search(mdsq, (short) 10);
assertEquals(4, kr.getMatches().size());
}
项目:Krill
文件:TestRegexIndex.java
@Test
public void testWildcardQuestionMarkRewritten () throws IOException {
ki = new KrillIndex();
ki.addDoc(createFieldDoc1());
ki.commit();
// meine? /+w1:2,s0 &Erfahrung
// meine? rewritten into meine.
SpanMultiTermQueryWrapper<RegexpQuery> mtq =
new SpanMultiTermQueryWrapper<RegexpQuery>(
new RegexpQuery(new Term("tokens", "s:meine.")));
SpanMultipleDistanceQuery mdsq = new SpanMultipleDistanceQuery(
new SpanClassQuery(mtq, (byte) 129),
new SpanClassQuery(sq, (byte) 129), constraints, true, true);
kr = ki.search(mdsq, (short) 10);
assertEquals(3, kr.getMatches().size());
}
项目:Krill
文件:TestRegexIndex.java
@Test
public void testWildcardPlusRewritten () throws IOException {
ki = new KrillIndex();
ki.addDoc(createFieldDoc1());
ki.commit();
// C2 meine+ /+w1:2,s0 &Erfahrung
// meine+ rewritten into meine.?
SpanMultiTermQueryWrapper<RegexpQuery> mtq =
new SpanMultiTermQueryWrapper<RegexpQuery>(
new RegexpQuery(new Term("tokens", "s:meine.?")));
SpanMultipleDistanceQuery mdsq = new SpanMultipleDistanceQuery(
new SpanClassQuery(mtq, (byte) 129),
new SpanClassQuery(sq, (byte) 129), constraints, true, true);
kr = ki.search(mdsq, (short) 10);
assertEquals(4, kr.getMatches().size());
}
项目:Krill
文件:TestRegexIndex.java
@Test
public void testWildcardPlusRewritten2 () throws IOException {
ki = new KrillIndex();
ki.addDoc(createFieldDoc1());
ki.commit();
// C2 mein+ /+w1:2,s0 &Erfahrung
// mein+ rewritten into mein.?
SpanMultiTermQueryWrapper<RegexpQuery> mtq =
new SpanMultiTermQueryWrapper<RegexpQuery>(
new RegexpQuery(new Term("tokens", "s:mein.?")));
SpanMultipleDistanceQuery mdsq = new SpanMultipleDistanceQuery(
new SpanClassQuery(mtq, (byte) 129),
new SpanClassQuery(sq, (byte) 129), constraints, true, true);
kr = ki.search(mdsq, (short) 10);
assertEquals(2, kr.getMatches().size());
}
项目:Krill
文件:TestWildcardIndex.java
@Test
public void testWildcardStarWithCollection () throws IOException {
ki = new KrillIndex();
ki.addDoc(createFieldDoc1());
ki.commit();
// meine*
WildcardQuery wcquery =
new WildcardQuery(new Term("tokens", "s:meine*"));
SpanMultiTermQueryWrapper<WildcardQuery> mtq =
new SpanMultiTermQueryWrapper<WildcardQuery>(wcquery);
// meine* /+w1:2,s0 &Erfahrung
SpanQuery mdsq = new SpanMultipleDistanceQuery(
new SpanClassQuery(mtq, (byte) 129),
new SpanClassQuery(sq, (byte) 129), constraints, true, true);
kr = ki.search(mdsq, (short) 10);
assertEquals(4, kr.getMatches().size());
}
项目:Krill
文件:TestWildcardIndex.java
@Test
public void testWildcardQuestionMark1 () throws IOException {
ki = new KrillIndex();
ki.addDoc(createFieldDoc1());
ki.commit();
// Wildcard ? means regex . (expects exactly one character)
SpanMultiTermQueryWrapper<WildcardQuery> mtq =
new SpanMultiTermQueryWrapper<WildcardQuery>(
new WildcardQuery(new Term("tokens", "s:meine?")));
SpanMultipleDistanceQuery mdsq = new SpanMultipleDistanceQuery(
new SpanClassQuery(mtq, (byte) 129),
new SpanClassQuery(sq, (byte) 129), constraints, true, true);
kr = ki.search(mdsq, (short) 10);
assertEquals(3, kr.getMatches().size());
}
项目:Krill
文件:TestWildcardIndex.java
@Test
public void testWildcardQuestionMark2 () throws IOException {
ki = new KrillIndex();
ki.addDoc(createFieldDoc1());
ki.commit();
// Wildcard ? means regex . (expects exactly one character)
SpanMultiTermQueryWrapper<WildcardQuery> mtq =
new SpanMultiTermQueryWrapper<WildcardQuery>(
new WildcardQuery(new Term("tokens", "s:mein?")));
SpanMultipleDistanceQuery mdsq = new SpanMultipleDistanceQuery(
new SpanClassQuery(mtq, (byte) 129),
new SpanClassQuery(sq, (byte) 129), constraints, true, true);
kr = ki.search(mdsq, (short) 10);
assertEquals(1, kr.getMatches().size());
}
项目:Krill
文件:TestRelationIndex.java
@Test
public void testRelationWithRegex () throws IOException {
ki.addDoc(createFieldDoc0());
ki.addDoc(createFieldDoc3());
ki.commit();
SpanQuery sq;
sq = new SpanRelationQuery(
new SpanMultiTermQueryWrapper<RegexQuery>(
new RegexQuery(new Term("base", ">:xip/.*"))),
true, RelationDirection.RIGHT);
kr = ki.search(sq, (short) 10);
assertEquals((long) 7, kr.getTotalResults());
sq = new SpanRelationQuery(
new SpanMultiTermQueryWrapper<RegexQuery>(
new RegexQuery(new Term("base", "<:xip/.*"))),
true, RelationDirection.LEFT);
kr = ki.search(sq, (short) 10);
assertEquals((long) 7, kr.getTotalResults());
}
项目:community-edition-old
文件:Solr4QueryParser.java
private SpanQuery wrapWildcardTerms(org.apache.lucene.index.Term term)
{
String termText = term.text();
SpanQuery nextSpanQuery;
if ((termText != null) && (termText.contains("*") || termText.contains("?")))
{
org.apache.lucene.search.WildcardQuery wildQuery = new org.apache.lucene.search.WildcardQuery(term);
SpanMultiTermQueryWrapper wrapper = new SpanMultiTermQueryWrapper<>(wildQuery);
wrapper.setRewriteMethod(new TopTermsSpanBooleanQueryRewrite(topTermSpanRewriteLimit));
nextSpanQuery = wrapper;
}
else
{
nextSpanQuery = new SpanTermQuery(term);
}
return nextSpanQuery;
}
项目:lucene-addons
文件:TestQPTestBaseSpanQuery.java
@SuppressWarnings("rawtypes")
@Override
public void assertInstanceOf(Query q, Class other) {
if (q instanceof SpanMultiTermQueryWrapper) {
q = ((SpanMultiTermQueryWrapper)q).getWrappedQuery();
} else if (q instanceof SpanTermQuery && other.equals(TermQuery.class)) {
assertTrue("termquery", true);
return;
} else if (q instanceof SpanNearQuery && other.equals(PhraseQuery.class)) {
assertTrue("spannear/phrase", true);
return;
} else if (q instanceof SpanOrQuery && other.equals(BooleanQuery.class)) {
assertTrue("spanor/boolean", true);
return;
}
super.assertInstanceOf(q, other);
}
项目:languagetool
文件:PatternRuleQueryBuilder.java
private SpanQuery asSpanQuery(BooleanClause query) {
if (query.getQuery() instanceof MultiTermQuery) {
return new SpanMultiTermQueryWrapper<>((MultiTermQuery) query.getQuery());
} else {
Set<Term> terms = new HashSet<>();
try {
indexSearcher.createWeight(query.getQuery(), false).extractTerms(terms);
} catch (IOException e) {
throw new RuntimeException(e);
}
if (terms.size() != 1) {
throw new RuntimeException("Expected term set of size 1: " + terms);
}
return new SpanTermQuery(terms.iterator().next());
}
}
项目:meltwater-elasticsearch-queries
文件:LimitingFilterFactory.java
private Query spanFilter(SpanQuery query) {
if (query instanceof SpanNearQuery) {
return spanNearFilter((SpanNearQuery) query);
} else if (query instanceof SpanNotQuery) {
return spanNotFilter((SpanNotQuery) query);
} else if (query instanceof SpanOrQuery) {
return spanOrFilter((SpanOrQuery) query);
} else if (query instanceof SpanTermQuery) {
return new TermQuery(((SpanTermQuery) query).getTerm());
} else if (query instanceof SpanMultiTermQueryWrapper) {
return ((SpanMultiTermQueryWrapper) query).getWrappedQuery();
} else {
return new QueryWrapperFilter(query);
}
}
项目:Krill
文件:SpanRegexQueryWrapper.java
public SpanRegexQueryWrapper (String field, String re, int flags,
boolean caseinsensitive) {
if (caseinsensitive) {
if (re.startsWith("s:")) {
re = re.replaceFirst("s:", "i:");
};
re = re.toLowerCase();
};
RegexpQuery requery = new RegexpQuery(new Term(field, re), flags);
query = new SpanMultiTermQueryWrapper<RegexpQuery>(requery);
}
项目:Krill
文件:SpanWildcardQueryWrapper.java
public SpanWildcardQueryWrapper (String field, String wc,
boolean caseinsensitive) {
if (caseinsensitive) {
if (wc.startsWith("s:")) {
wc = wc.replaceFirst("s:", "i:");
};
wc = wc.toLowerCase();
};
WildcardQuery wcquery = new WildcardQuery(new Term(field, wc));
query = new SpanMultiTermQueryWrapper<WildcardQuery>(wcquery);
}
项目:Krill
文件:TestWildcardIndex.java
@Test
public void testWildcardPlusWithCollection () throws IOException {
ki = new KrillIndex();
ki.addDoc(createFieldDoc1());
ki.commit();
// mein+ /+w1:2,s0 &Erfahrung
SpanMultiTermQueryWrapper<WildcardQuery> mtq =
new SpanMultiTermQueryWrapper<WildcardQuery>(
new WildcardQuery(new Term("tokens", "s:mein+")));
// Just to make sure, Lucene internal queries treat SpanOr([]) correctly
SpanQuery soq = new SpanNearQuery(new SpanQuery[] { mtq, sq }, 1, true);
kr = ki.search(soq, (short) 10);
// As described in http://korap.github.io/Koral/, '+' is not a valid wildcard
assertEquals(0, kr.getMatches().size());
// Check the reported classed query
SpanMultipleDistanceQuery mdsq = new SpanMultipleDistanceQuery(
new SpanClassQuery(mtq, (byte) 129),
new SpanClassQuery(sq, (byte) 129), constraints, true, true);
kr = ki.search(mdsq, (short) 10);
assertEquals(0, kr.getMatches().size());
// Check multiple distance query
mdsq = new SpanMultipleDistanceQuery(mtq, sq, constraints, true, true);
kr = ki.search(mdsq, (short) 10);
assertEquals(0, kr.getMatches().size());
}
项目:search
文件:TestMultiTermHighlighting.java
public void testSpanWildcard() throws Exception {
Directory dir = newDirectory();
// use simpleanalyzer for more natural tokenization (else "test." is a token)
final Analyzer analyzer = new MockAnalyzer(random(), MockTokenizer.SIMPLE, true);
IndexWriterConfig iwc = newIndexWriterConfig(analyzer);
iwc.setMergePolicy(newLogMergePolicy());
RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwc);
FieldType offsetsType = new FieldType(TextField.TYPE_STORED);
offsetsType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
Field body = new Field("body", "", offsetsType);
Document doc = new Document();
doc.add(body);
body.setStringValue("This is a test.");
iw.addDocument(doc);
body.setStringValue("Test a one sentence document.");
iw.addDocument(doc);
IndexReader ir = iw.getReader();
iw.close();
IndexSearcher searcher = newSearcher(ir);
PostingsHighlighter highlighter = new PostingsHighlighter() {
@Override
protected Analyzer getIndexAnalyzer(String field) {
return analyzer;
}
};
Query query = new SpanMultiTermQueryWrapper<>(new WildcardQuery(new Term("body", "te*")));
TopDocs topDocs = searcher.search(query, null, 10, Sort.INDEXORDER);
assertEquals(2, topDocs.totalHits);
String snippets[] = highlighter.highlight("body", query, searcher, topDocs);
assertEquals(2, snippets.length);
assertEquals("This is a <b>test</b>.", snippets[0]);
assertEquals("<b>Test</b> a one sentence document.", snippets[1]);
ir.close();
dir.close();
}
项目:search
文件:MemoryIndexTest.java
public void testNullPointerException() throws IOException {
RegexpQuery regex = new RegexpQuery(new Term("field", "worl."));
SpanQuery wrappedquery = new SpanMultiTermQueryWrapper<>(regex);
MemoryIndex mindex = new MemoryIndex(random().nextBoolean(), random().nextInt(50) * 1024 * 1024);
mindex.addField("field", new MockAnalyzer(random()).tokenStream("field", "hello there"));
// This throws an NPE
assertEquals(0, mindex.search(wrappedquery), 0.00001f);
}
项目:search
文件:MemoryIndexTest.java
public void testPassesIfWrapped() throws IOException {
RegexpQuery regex = new RegexpQuery(new Term("field", "worl."));
SpanQuery wrappedquery = new SpanOrQuery(new SpanMultiTermQueryWrapper<>(regex));
MemoryIndex mindex = new MemoryIndex(random().nextBoolean(), random().nextInt(50) * 1024 * 1024);
mindex.addField("field", new MockAnalyzer(random()).tokenStream("field", "hello there"));
// This passes though
assertEquals(0, mindex.search(wrappedquery), 0.00001f);
}
项目:search
文件:TestSpanRegexQuery.java
public void testSpanRegex() throws Exception {
Directory directory = newDirectory();
IndexWriter writer = new IndexWriter(directory, newIndexWriterConfig(new MockAnalyzer(random())));
Document doc = new Document();
// doc.add(newField("field", "the quick brown fox jumps over the lazy dog",
// Field.Store.NO, Field.Index.ANALYZED));
// writer.addDocument(doc);
// doc = new Document();
doc.add(newTextField("field", "auto update", Field.Store.NO));
writer.addDocument(doc);
doc = new Document();
doc.add(newTextField("field", "first auto update", Field.Store.NO));
writer.addDocument(doc);
writer.forceMerge(1);
writer.close();
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = newSearcher(reader);
SpanQuery srq = new SpanMultiTermQueryWrapper<>(new RegexQuery(new Term("field", "aut.*")));
SpanFirstQuery sfq = new SpanFirstQuery(srq, 1);
// SpanNearQuery query = new SpanNearQuery(new SpanQuery[] {srq, stq}, 6,
// true);
int numHits = searcher.search(sfq, null, 1000).totalHits;
assertEquals(1, numHits);
reader.close();
directory.close();
}
项目:search
文件:TestRegexQuery.java
private int spanRegexQueryNrHits(String regex1, String regex2, int slop, boolean ordered) throws Exception {
SpanQuery srq1 = new SpanMultiTermQueryWrapper<>(new RegexQuery(newTerm(regex1)));
SpanQuery srq2 = new SpanMultiTermQueryWrapper<>(new RegexQuery(newTerm(regex2)));
SpanNearQuery query = new SpanNearQuery( new SpanQuery[]{srq1, srq2}, slop, ordered);
return searcher.search(query, null, 1000).totalHits;
}
项目:NYBC
文件:MemoryIndexTest.java
public void testNullPointerException() throws IOException {
RegexpQuery regex = new RegexpQuery(new Term("field", "worl."));
SpanQuery wrappedquery = new SpanMultiTermQueryWrapper<RegexpQuery>(regex);
MemoryIndex mindex = new MemoryIndex(random().nextBoolean(), random().nextInt(50) * 1024 * 1024);
mindex.addField("field", new MockAnalyzer(random()).tokenStream("field", new StringReader("hello there")));
// This throws an NPE
assertEquals(0, mindex.search(wrappedquery), 0.00001f);
}
项目:NYBC
文件:MemoryIndexTest.java
public void testPassesIfWrapped() throws IOException {
RegexpQuery regex = new RegexpQuery(new Term("field", "worl."));
SpanQuery wrappedquery = new SpanOrQuery(new SpanMultiTermQueryWrapper<RegexpQuery>(regex));
MemoryIndex mindex = new MemoryIndex(random().nextBoolean(), random().nextInt(50) * 1024 * 1024);
mindex.addField("field", new MockAnalyzer(random()).tokenStream("field", new StringReader("hello there")));
// This passes though
assertEquals(0, mindex.search(wrappedquery), 0.00001f);
}
项目:NYBC
文件:TestSpanRegexQuery.java
public void testSpanRegex() throws Exception {
Directory directory = newDirectory();
IndexWriter writer = new IndexWriter(directory, newIndexWriterConfig(
TEST_VERSION_CURRENT, new MockAnalyzer(random())));
Document doc = new Document();
// doc.add(newField("field", "the quick brown fox jumps over the lazy dog",
// Field.Store.NO, Field.Index.ANALYZED));
// writer.addDocument(doc);
// doc = new Document();
doc.add(newTextField("field", "auto update", Field.Store.NO));
writer.addDocument(doc);
doc = new Document();
doc.add(newTextField("field", "first auto update", Field.Store.NO));
writer.addDocument(doc);
writer.forceMerge(1);
writer.close();
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
SpanQuery srq = new SpanMultiTermQueryWrapper<RegexQuery>(new RegexQuery(new Term("field", "aut.*")));
SpanFirstQuery sfq = new SpanFirstQuery(srq, 1);
// SpanNearQuery query = new SpanNearQuery(new SpanQuery[] {srq, stq}, 6,
// true);
int numHits = searcher.search(sfq, null, 1000).totalHits;
assertEquals(1, numHits);
reader.close();
directory.close();
}
项目:NYBC
文件:TestRegexQuery.java
private int spanRegexQueryNrHits(String regex1, String regex2, int slop, boolean ordered) throws Exception {
SpanQuery srq1 = new SpanMultiTermQueryWrapper<RegexQuery>(new RegexQuery(newTerm(regex1)));
SpanQuery srq2 = new SpanMultiTermQueryWrapper<RegexQuery>(new RegexQuery(newTerm(regex2)));
SpanNearQuery query = new SpanNearQuery( new SpanQuery[]{srq1, srq2}, slop, ordered);
return searcher.search(query, null, 1000).totalHits;
}
项目:lucene-addons
文件:TestQPTestBaseSpanQuery.java
@Override
public void assertQueryEquals(CommonQueryParserConfiguration cqpC, String field, String query, String result) throws Exception {
Query q = getQuery(query, cqpC);
if (q instanceof SpanMultiTermQueryWrapper) {
@SuppressWarnings("rawtypes")
Query tmp = ((SpanMultiTermQueryWrapper)q).getWrappedQuery();
//TODO: we used to set boost here
q = tmp;
}
assertEquals(result, q.toString(field));
}
项目:lucene-addons
文件:TestQPTestBaseSpanQuery.java
@Override
public void assertQueryEquals(String query, Analyzer a, String result) throws Exception {
Query q = getQuery(query, a);
if (q instanceof SpanMultiTermQueryWrapper) {
@SuppressWarnings("rawtypes")
Query tmp = ((SpanMultiTermQueryWrapper)q).getWrappedQuery();
//TODO: we used to set boost here
q = tmp;
} else if (q instanceof SpanOrQuery){
if (((SpanOrQuery)q).getClauses().length == 0){
q = new BooleanQuery.Builder().build();
}
}
assertEquals(result, q.toString("field"));
}
项目:lucene-addons
文件:TestQPTestBaseSpanQuery.java
public void assertQueryEqualsCMP(String query, Analyzer a, String result) throws Exception {
Query q = getQuery(query, a);
if (q instanceof SpanMultiTermQueryWrapper){
@SuppressWarnings("rawtypes")
Query tmp = ((SpanMultiTermQueryWrapper)q).getWrappedQuery();
//TODO we used to set boost here
q = tmp;
} else if (q instanceof SpanOrQuery){
if (((SpanOrQuery)q).getClauses().length == 0){
q = new BooleanQuery.Builder().build();
}
}
assertEquals(result, q.toString("field"));
}
项目:lucene-addons
文件:TestConcordanceSearcher.java
@Test
public void testRewrites() throws Exception {
//test to make sure that queries are rewritten
//first test straight prefix queries
String[] docs = new String[]{"aa ba ca aa ba ca", "ca ba aa ca ba aa da ea za",
"ca ba aa ca ba aa ea aa ba ca za"};
Analyzer analyzer = getAnalyzer(MockTokenFilter.EMPTY_STOPSET);
Directory directory = getDirectory(analyzer, docs);
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher indexSearcher = new IndexSearcher(reader);
ConcordanceSearcher searcher = new ConcordanceSearcher(
new WindowBuilder(10, 10, analyzer.getOffsetGap(FIELD)));
BooleanQuery q = new BooleanQuery.Builder()
.add(new PrefixQuery(new Term(FIELD, "a")), Occur.MUST)
.add(new PrefixQuery(new Term(FIELD, "d")),
Occur.MUST_NOT).build();
//now test straight and span wrapper
ConcordanceWindowCollector collector = new ConcordanceWindowCollector(10);
searcher.search(indexSearcher,
FIELD, q, new PrefixQuery(new Term(FIELD, "z")),
analyzer, collector);
// shouldn't include document with "da", but must include one with za
assertEquals(3, collector.size());
collector = new ConcordanceWindowCollector(10);
searcher.search(indexSearcher,
FIELD, q, new SpanMultiTermQueryWrapper<>(new PrefixQuery(new Term(FIELD, "z"))),
analyzer, collector);
// shouldn't include document with "da", but must include one with za
assertEquals(3, collector.size());
reader.close();
directory.close();
}
项目:Maskana-Gestor-de-Conocimiento
文件:MemoryIndexTest.java
public void testNullPointerException() throws IOException {
RegexpQuery regex = new RegexpQuery(new Term("field", "worl."));
SpanQuery wrappedquery = new SpanMultiTermQueryWrapper<RegexpQuery>(regex);
MemoryIndex mindex = new MemoryIndex(random().nextBoolean(), random().nextInt(50) * 1024 * 1024);
mindex.addField("field", new MockAnalyzer(random()).tokenStream("field", "hello there"));
// This throws an NPE
assertEquals(0, mindex.search(wrappedquery), 0.00001f);
}
项目:Maskana-Gestor-de-Conocimiento
文件:MemoryIndexTest.java
public void testPassesIfWrapped() throws IOException {
RegexpQuery regex = new RegexpQuery(new Term("field", "worl."));
SpanQuery wrappedquery = new SpanOrQuery(new SpanMultiTermQueryWrapper<RegexpQuery>(regex));
MemoryIndex mindex = new MemoryIndex(random().nextBoolean(), random().nextInt(50) * 1024 * 1024);
mindex.addField("field", new MockAnalyzer(random()).tokenStream("field", "hello there"));
// This passes though
assertEquals(0, mindex.search(wrappedquery), 0.00001f);
}
项目:Maskana-Gestor-de-Conocimiento
文件:TestSpanRegexQuery.java
public void testSpanRegex() throws Exception {
Directory directory = newDirectory();
IndexWriter writer = new IndexWriter(directory, newIndexWriterConfig(
TEST_VERSION_CURRENT, new MockAnalyzer(random())));
Document doc = new Document();
// doc.add(newField("field", "the quick brown fox jumps over the lazy dog",
// Field.Store.NO, Field.Index.ANALYZED));
// writer.addDocument(doc);
// doc = new Document();
doc.add(newTextField("field", "auto update", Field.Store.NO));
writer.addDocument(doc);
doc = new Document();
doc.add(newTextField("field", "first auto update", Field.Store.NO));
writer.addDocument(doc);
writer.forceMerge(1);
writer.close();
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = newSearcher(reader);
SpanQuery srq = new SpanMultiTermQueryWrapper<RegexQuery>(new RegexQuery(new Term("field", "aut.*")));
SpanFirstQuery sfq = new SpanFirstQuery(srq, 1);
// SpanNearQuery query = new SpanNearQuery(new SpanQuery[] {srq, stq}, 6,
// true);
int numHits = searcher.search(sfq, null, 1000).totalHits;
assertEquals(1, numHits);
reader.close();
directory.close();
}
项目:Maskana-Gestor-de-Conocimiento
文件:TestRegexQuery.java
private int spanRegexQueryNrHits(String regex1, String regex2, int slop, boolean ordered) throws Exception {
SpanQuery srq1 = new SpanMultiTermQueryWrapper<RegexQuery>(new RegexQuery(newTerm(regex1)));
SpanQuery srq2 = new SpanMultiTermQueryWrapper<RegexQuery>(new RegexQuery(newTerm(regex2)));
SpanNearQuery query = new SpanNearQuery( new SpanQuery[]{srq1, srq2}, slop, ordered);
return searcher.search(query, null, 1000).totalHits;
}
项目:elasticsearch_my
文件:CustomUnifiedHighlighter.java
/**
* Translate custom queries in queries that are supported by the unified highlighter.
*/
private Collection<Query> rewriteCustomQuery(Query query) {
if (query instanceof MultiPhrasePrefixQuery) {
MultiPhrasePrefixQuery mpq = (MultiPhrasePrefixQuery) query;
Term[][] terms = mpq.getTerms();
int[] positions = mpq.getPositions();
SpanQuery[] positionSpanQueries = new SpanQuery[positions.length];
int sizeMinus1 = terms.length - 1;
for (int i = 0; i < positions.length; i++) {
SpanQuery[] innerQueries = new SpanQuery[terms[i].length];
for (int j = 0; j < terms[i].length; j++) {
if (i == sizeMinus1) {
innerQueries[j] = new SpanMultiTermQueryWrapper(new PrefixQuery(terms[i][j]));
} else {
innerQueries[j] = new SpanTermQuery(terms[i][j]);
}
}
if (innerQueries.length > 1) {
positionSpanQueries[i] = new SpanOrQuery(innerQueries);
} else {
positionSpanQueries[i] = innerQueries[0];
}
}
// sum position increments beyond 1
int positionGaps = 0;
if (positions.length >= 2) {
// positions are in increasing order. max(0,...) is just a safeguard.
positionGaps = Math.max(0, positions[positions.length - 1] - positions[0] - positions.length + 1);
}
//if original slop is 0 then require inOrder
boolean inorder = (mpq.getSlop() == 0);
return Collections.singletonList(new SpanNearQuery(positionSpanQueries,
mpq.getSlop() + positionGaps, inorder));
} else if (query instanceof CommonTermsQuery) {
CommonTermsQuery ctq = (CommonTermsQuery) query;
List<Query> tqs = new ArrayList<> ();
for (Term term : ctq.getTerms()) {
tqs.add(new TermQuery(term));
}
return tqs;
} else if (query instanceof AllTermQuery) {
AllTermQuery atq = (AllTermQuery) query;
return Collections.singletonList(new TermQuery(atq.getTerm()));
} else if (query instanceof FunctionScoreQuery) {
return Collections.singletonList(((FunctionScoreQuery) query).getSubQuery());
} else if (query instanceof FiltersFunctionScoreQuery) {
return Collections.singletonList(((FiltersFunctionScoreQuery) query).getSubQuery());
} else {
return null;
}
}
项目:Krill
文件:TestSampleIndex.java
@Test
public void testMultipleDistanceWithWildcards ()
throws IOException, QueryException {
WildcardQuery wcquery =
new WildcardQuery(new Term("tokens", "s:meine*"));
SpanMultiTermQueryWrapper<WildcardQuery> mtq =
new SpanMultiTermQueryWrapper<WildcardQuery>(wcquery);
// meine* /+w1:2 &Erfahrung
SpanQuery tdq = new SpanDistanceQuery(mtq, sq, TestMultipleDistanceIndex
.createConstraint("w", 1, 2, true, false), true);
kr = sample.search(tdq, (short) 10);
assertEquals(4, kr.getMatches().size());
assertEquals(107, kr.getMatch(0).getStartPos());
assertEquals(109, kr.getMatch(0).getEndPos());
assertEquals(132566, kr.getMatch(1).getStartPos());
assertEquals(132569, kr.getMatch(1).getEndPos());
assertEquals(161393, kr.getMatch(2).getStartPos());
assertEquals(161396, kr.getMatch(2).getEndPos());
assertEquals(10298, kr.getMatch(3).getStartPos());
assertEquals(10301, kr.getMatch(3).getEndPos());
// meine* /+s0 &Erfahrung
SpanQuery edq = new SpanDistanceQuery(mtq, sq, TestMultipleDistanceIndex
.createConstraint("tokens", "base/s:s", 0, 0, true, false),
true);
kr = sample.search(edq, (short) 20);
assertEquals(18, kr.getMatches().size());
//meine* /+w1:2,s0 &Erfahrung
SpanQuery mdsq = new SpanMultipleDistanceQuery(
new SpanClassQuery(mtq, (byte) 129),
new SpanClassQuery(sq, (byte) 129), constraints, true, true);
kr = sample.search(mdsq, (short) 10);
assertEquals(4, kr.getMatches().size());
// check SpanQueryWrapper generated query
SpanQueryWrapper sqwi = getJSONQuery(
getClass().getResource("/queries/bugs/cosmas_wildcards.jsonld")
.getFile());
SpanQuery jsq = sqwi.toQuery();
assertEquals(mdsq.toString(), jsq.toString());
}
项目:Krill
文件:TestSampleIndex.java
@Test
public void testWildcardStarWithCollection () throws IOException {
// meine*
WildcardQuery wcquery =
new WildcardQuery(new Term("tokens", "s:meine*"));
SpanMultiTermQueryWrapper<WildcardQuery> mtq =
new SpanMultiTermQueryWrapper<WildcardQuery>(wcquery);
// meine* /+w1:2,s0 &Erfahrung
SpanQuery mdsq = new SpanMultipleDistanceQuery(
new SpanClassQuery(mtq, (byte) 129),
new SpanClassQuery(sq, (byte) 129), constraints, true, true);
krillAvailabilityAll.setSpanQuery(mdsq);
kr = sample.search(krillAvailabilityAll);
assertEquals(4, kr.getMatches().size());
assertEquals("match-GOE/AGI/04846-p107-109", kr.getMatch(0).getID());
assertEquals("QAO-NC-LOC:ids", kr.getMatch(0).getAvailability());
assertEquals(
"... gelesen und erzählt hat, ich in "
+ "[[meine Erfahrungen]] hätte mit aufnehmen sollen. "
+ "heute jedoch ...",
kr.getMatch(0).getSnippetBrackets());
assertEquals("match-GOE/AGD/00000-p132566-132569",
kr.getMatch(1).getID());
assertEquals("QAO-NC-LOC:ids-NU:1", kr.getMatch(1).getAvailability());
assertEquals("... Mannes umständlich beibringen und solches "
+ "durch [[meine eigne Erfahrung]] bekräftigen: das "
+ "alles sollte nicht gelten ...",
kr.getMatch(1).getSnippetBrackets());
assertEquals("match-GOE/AGD/00000-p161393-161396",
kr.getMatch(2).getID());
assertEquals("QAO-NC-LOC:ids-NU:1", kr.getMatch(2).getAvailability());
assertEquals("... lassen, bis er sich zuletzt an "
+ "[[meine sämtlichen Erfahrungen]] und Überzeugungen "
+ "anschloß, in welchem Sinne ...",
kr.getMatch(2).getSnippetBrackets());
assertEquals("match-GOE/AGD/06345-p10298-10301",
kr.getMatch(3).getID());
assertEquals("QAO-NC", kr.getMatch(3).getAvailability());
assertEquals("... bis aufs Äußerste verfolgte, und, über "
+ "[[meine enge Erfahrung]] hinaus, nach ähnlichen Fällen "
+ "in der ...", kr.getMatch(3).getSnippetBrackets());
}
项目:Krill
文件:TestMultipleDistanceIndex.java
@Test
public void testQueryWithWildCard () throws IOException {
// meine* /+w1:2,s0 &Erfahrung
ki = new KrillIndex();
ki.addDoc(createFieldDoc5());
ki.commit();
// Check simple rewriting
WildcardQuery wcquery =
new WildcardQuery(new Term("tokens", "s:Meine*"));
SpanMultiTermQueryWrapper<WildcardQuery> mtq =
new SpanMultiTermQueryWrapper<WildcardQuery>(wcquery);
assertEquals(wcquery.toString(), "tokens:s:Meine*");
kr = ki.search(mtq, (short) 10);
assertEquals(4, kr.getMatches().size());
assertEquals(0, kr.getMatch(0).getStartPos());
assertEquals(1, kr.getMatch(0).getEndPos());
// Check rewriting in multidistance query
SpanQuery sq = new SpanTermQuery(new Term("tokens", "l:Erfahrung"));
kr = ki.search(sq, (short) 10);
assertEquals(4, kr.getMatches().size());
List<DistanceConstraint> constraints =
new ArrayList<DistanceConstraint>();
constraints.add(createConstraint("w", 1, 2, true, false));
constraints.add(createConstraint("tokens", "s", 0, 0, true, false));
SpanQuery mdsq =
new SpanMultipleDistanceQuery(mtq, sq, constraints, true, true);
assertEquals(mdsq.toString(),
"spanMultipleDistance(SpanMultiTermQueryWrapper(tokens:s:Meine*), "
+ "tokens:l:Erfahrung, [(w[1:2], ordered, notExcluded), (s[0:0], "
+ "ordered, notExcluded)])");
kr = ki.search(mdsq, (short) 10);
assertEquals(3, kr.getMatches().size());
assertEquals(0, kr.getMatch(0).getStartPos());
assertEquals(2, kr.getMatch(0).getEndPos());
// Check skipping with multiple documents
ki.addDoc(createFieldDoc6());
ki.addDoc(createFieldDoc7());
ki.addDoc(createFieldDoc8());
ki.commit();
kr = ki.search(mdsq, (short) 10);
assertEquals(6, kr.getMatches().size());
}
项目:Krill
文件:TestSpanExpansionIndex.java
/**
* Query rewrite bug
*
* Warning: This is not armoured by <base/s=t>!
*
* @throws IOException
*/
@Test
public void testQueryRewriteBug () throws IOException {
KrillIndex ki = new KrillIndex();
ki.addDoc(createFieldDoc0()); // ceccecdeec
/*
ki.addDoc(createFieldDoc1()); // bbccdd || only not clause
ki.addDoc(createFieldDoc2()); // beccea | only main clause
*/
ki.commit();
// See /queries/bugs/repetition_group_rewrite
RegexpQuery requery = new RegexpQuery(new Term("base", "s:[ac]"),
RegExp.ALL);
SpanMultiTermQueryWrapper<RegexpQuery> query = new SpanMultiTermQueryWrapper<RegexpQuery>(
requery);
SpanExpansionQuery seq = new SpanExpansionQuery(query, 1, 1, 1, true);
SpanRepetitionQuery rep = new SpanRepetitionQuery(seq, 2, 2, true);
// spanRepetition(
// spanExpansion(
// SpanMultiTermQueryWrapper(base:/s:[ac]/),
// []{1, 1},
// right
// ){2,2}
// )
kr = ki.search(query, (short) 20);
assertEquals(5, kr.getTotalResults());
assertEquals(0, kr.getMatch(0).getStartPos());
assertEquals(1, kr.getMatch(0).getEndPos());
assertEquals(2, kr.getMatch(1).getStartPos());
assertEquals(3, kr.getMatch(1).getEndPos());
assertEquals(3, kr.getMatch(2).getStartPos());
assertEquals(4, kr.getMatch(2).getEndPos());
assertEquals(5, kr.getMatch(3).getStartPos());
assertEquals(6, kr.getMatch(3).getEndPos());
assertEquals(9, kr.getMatch(4).getStartPos());
assertEquals(10, kr.getMatch(4).getEndPos());
kr = ki.search(seq, (short) 20);
assertEquals(5, kr.getTotalResults());
assertEquals(0, kr.getMatch(0).getStartPos());
assertEquals(2, kr.getMatch(0).getEndPos());
assertEquals(2, kr.getMatch(1).getStartPos());
assertEquals(4, kr.getMatch(1).getEndPos());
assertEquals(3, kr.getMatch(2).getStartPos());
assertEquals(5, kr.getMatch(2).getEndPos());
assertEquals(5, kr.getMatch(3).getStartPos());
assertEquals(7, kr.getMatch(3).getEndPos());
assertEquals(9, kr.getMatch(4).getStartPos());
assertEquals(11, kr.getMatch(4).getEndPos());
kr = ki.search(rep, (short) 20);
// for (Match km : kr.getMatches()){
// System.out.println(
// km.getStartPos() +
// "," +
// km.getEndPos() +
// " " +
// km.getSnippetBrackets()
// );
// };
assertEquals("[[cecc]]ecdeec", kr.getMatch(0).getSnippetBrackets());
assertEquals("cec[[cecd]]eec", kr.getMatch(1).getSnippetBrackets());
assertEquals((long) 2, kr.getTotalResults());
}
项目:search
文件:TestMultiTermHighlighting.java
public void testSpanOr() throws Exception {
Directory dir = newDirectory();
// use simpleanalyzer for more natural tokenization (else "test." is a token)
final Analyzer analyzer = new MockAnalyzer(random(), MockTokenizer.SIMPLE, true);
IndexWriterConfig iwc = newIndexWriterConfig(analyzer);
iwc.setMergePolicy(newLogMergePolicy());
RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwc);
FieldType offsetsType = new FieldType(TextField.TYPE_STORED);
offsetsType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
Field body = new Field("body", "", offsetsType);
Document doc = new Document();
doc.add(body);
body.setStringValue("This is a test.");
iw.addDocument(doc);
body.setStringValue("Test a one sentence document.");
iw.addDocument(doc);
IndexReader ir = iw.getReader();
iw.close();
IndexSearcher searcher = newSearcher(ir);
PostingsHighlighter highlighter = new PostingsHighlighter() {
@Override
protected Analyzer getIndexAnalyzer(String field) {
return analyzer;
}
};
SpanQuery childQuery = new SpanMultiTermQueryWrapper<>(new WildcardQuery(new Term("body", "te*")));
Query query = new SpanOrQuery(new SpanQuery[] { childQuery });
TopDocs topDocs = searcher.search(query, null, 10, Sort.INDEXORDER);
assertEquals(2, topDocs.totalHits);
String snippets[] = highlighter.highlight("body", query, searcher, topDocs);
assertEquals(2, snippets.length);
assertEquals("This is a <b>test</b>.", snippets[0]);
assertEquals("<b>Test</b> a one sentence document.", snippets[1]);
ir.close();
dir.close();
}
项目:search
文件:TestMultiTermHighlighting.java
public void testSpanNear() throws Exception {
Directory dir = newDirectory();
// use simpleanalyzer for more natural tokenization (else "test." is a token)
final Analyzer analyzer = new MockAnalyzer(random(), MockTokenizer.SIMPLE, true);
IndexWriterConfig iwc = newIndexWriterConfig(analyzer);
iwc.setMergePolicy(newLogMergePolicy());
RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwc);
FieldType offsetsType = new FieldType(TextField.TYPE_STORED);
offsetsType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
Field body = new Field("body", "", offsetsType);
Document doc = new Document();
doc.add(body);
body.setStringValue("This is a test.");
iw.addDocument(doc);
body.setStringValue("Test a one sentence document.");
iw.addDocument(doc);
IndexReader ir = iw.getReader();
iw.close();
IndexSearcher searcher = newSearcher(ir);
PostingsHighlighter highlighter = new PostingsHighlighter() {
@Override
protected Analyzer getIndexAnalyzer(String field) {
return analyzer;
}
};
SpanQuery childQuery = new SpanMultiTermQueryWrapper<>(new WildcardQuery(new Term("body", "te*")));
Query query = new SpanNearQuery(new SpanQuery[] { childQuery }, 0, true);
TopDocs topDocs = searcher.search(query, null, 10, Sort.INDEXORDER);
assertEquals(2, topDocs.totalHits);
String snippets[] = highlighter.highlight("body", query, searcher, topDocs);
assertEquals(2, snippets.length);
assertEquals("This is a <b>test</b>.", snippets[0]);
assertEquals("<b>Test</b> a one sentence document.", snippets[1]);
ir.close();
dir.close();
}