+++ /dev/null
-package org.apache.lucene.search.vectorhighlight;
-
-/**
- * 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.
- */
-
-import java.io.IOException;
-import java.io.Reader;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.analysis.Token;
-import org.apache.lucene.analysis.TokenStream;
-import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
-import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.BooleanClause.Occur;
-import org.apache.lucene.util.AttributeImpl;
-
-public class IndexTimeSynonymTest extends AbstractTestCase {
-
- public void testFieldTermStackIndex1wSearch1term() throws Exception {
- makeIndex1w();
-
- FieldQuery fq = new FieldQuery( tq( "Mac" ), true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- assertEquals( 1, stack.termList.size() );
- assertEquals( "Mac(11,20,3)", stack.pop().toString() );
- }
-
- public void testFieldTermStackIndex1wSearch2terms() throws Exception {
- makeIndex1w();
-
- BooleanQuery bq = new BooleanQuery();
- bq.add( tq( "Mac" ), Occur.SHOULD );
- bq.add( tq( "MacBook" ), Occur.SHOULD );
- FieldQuery fq = new FieldQuery( bq, true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- assertEquals( 2, stack.termList.size() );
- Set<String> expectedSet = new HashSet<String>();
- expectedSet.add( "Mac(11,20,3)" );
- expectedSet.add( "MacBook(11,20,3)" );
- assertTrue( expectedSet.contains( stack.pop().toString() ) );
- assertTrue( expectedSet.contains( stack.pop().toString() ) );
- }
-
- public void testFieldTermStackIndex1w2wSearch1term() throws Exception {
- makeIndex1w2w();
-
- FieldQuery fq = new FieldQuery( tq( "pc" ), true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- assertEquals( 1, stack.termList.size() );
- assertEquals( "pc(3,5,1)", stack.pop().toString() );
- }
-
- public void testFieldTermStackIndex1w2wSearch1phrase() throws Exception {
- makeIndex1w2w();
-
- FieldQuery fq = new FieldQuery( pqF( "personal", "computer" ), true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- assertEquals( 2, stack.termList.size() );
- assertEquals( "personal(3,5,1)", stack.pop().toString() );
- assertEquals( "computer(3,5,2)", stack.pop().toString() );
- }
-
- public void testFieldTermStackIndex1w2wSearch1partial() throws Exception {
- makeIndex1w2w();
-
- FieldQuery fq = new FieldQuery( tq( "computer" ), true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- assertEquals( 1, stack.termList.size() );
- assertEquals( "computer(3,5,2)", stack.pop().toString() );
- }
-
- public void testFieldTermStackIndex1w2wSearch1term1phrase() throws Exception {
- makeIndex1w2w();
-
- BooleanQuery bq = new BooleanQuery();
- bq.add( tq( "pc" ), Occur.SHOULD );
- bq.add( pqF( "personal", "computer" ), Occur.SHOULD );
- FieldQuery fq = new FieldQuery( bq, true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- assertEquals( 3, stack.termList.size() );
- Set<String> expectedSet = new HashSet<String>();
- expectedSet.add( "pc(3,5,1)" );
- expectedSet.add( "personal(3,5,1)" );
- assertTrue( expectedSet.contains( stack.pop().toString() ) );
- assertTrue( expectedSet.contains( stack.pop().toString() ) );
- assertEquals( "computer(3,5,2)", stack.pop().toString() );
- }
-
- public void testFieldTermStackIndex2w1wSearch1term() throws Exception {
- makeIndex2w1w();
-
- FieldQuery fq = new FieldQuery( tq( "pc" ), true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- assertEquals( 1, stack.termList.size() );
- assertEquals( "pc(3,20,1)", stack.pop().toString() );
- }
-
- public void testFieldTermStackIndex2w1wSearch1phrase() throws Exception {
- makeIndex2w1w();
-
- FieldQuery fq = new FieldQuery( pqF( "personal", "computer" ), true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- assertEquals( 2, stack.termList.size() );
- assertEquals( "personal(3,20,1)", stack.pop().toString() );
- assertEquals( "computer(3,20,2)", stack.pop().toString() );
- }
-
- public void testFieldTermStackIndex2w1wSearch1partial() throws Exception {
- makeIndex2w1w();
-
- FieldQuery fq = new FieldQuery( tq( "computer" ), true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- assertEquals( 1, stack.termList.size() );
- assertEquals( "computer(3,20,2)", stack.pop().toString() );
- }
-
- public void testFieldTermStackIndex2w1wSearch1term1phrase() throws Exception {
- makeIndex2w1w();
-
- BooleanQuery bq = new BooleanQuery();
- bq.add( tq( "pc" ), Occur.SHOULD );
- bq.add( pqF( "personal", "computer" ), Occur.SHOULD );
- FieldQuery fq = new FieldQuery( bq, true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- assertEquals( 3, stack.termList.size() );
- Set<String> expectedSet = new HashSet<String>();
- expectedSet.add( "pc(3,20,1)" );
- expectedSet.add( "personal(3,20,1)" );
- assertTrue( expectedSet.contains( stack.pop().toString() ) );
- assertTrue( expectedSet.contains( stack.pop().toString() ) );
- assertEquals( "computer(3,20,2)", stack.pop().toString() );
- }
-
- public void testFieldPhraseListIndex1w2wSearch1phrase() throws Exception {
- makeIndex1w2w();
-
- FieldQuery fq = new FieldQuery( pqF( "personal", "computer" ), true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- FieldPhraseList fpl = new FieldPhraseList( stack, fq );
- assertEquals( 1, fpl.phraseList.size() );
- assertEquals( "personalcomputer(1.0)((3,5))", fpl.phraseList.get( 0 ).toString() );
- assertEquals( 3, fpl.phraseList.get( 0 ).getStartOffset() );
- assertEquals( 5, fpl.phraseList.get( 0 ).getEndOffset() );
- }
-
- public void testFieldPhraseListIndex1w2wSearch1partial() throws Exception {
- makeIndex1w2w();
-
- FieldQuery fq = new FieldQuery( tq( "computer" ), true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- FieldPhraseList fpl = new FieldPhraseList( stack, fq );
- assertEquals( 1, fpl.phraseList.size() );
- assertEquals( "computer(1.0)((3,5))", fpl.phraseList.get( 0 ).toString() );
- assertEquals( 3, fpl.phraseList.get( 0 ).getStartOffset() );
- assertEquals( 5, fpl.phraseList.get( 0 ).getEndOffset() );
- }
-
- public void testFieldPhraseListIndex1w2wSearch1term1phrase() throws Exception {
- makeIndex1w2w();
-
- BooleanQuery bq = new BooleanQuery();
- bq.add( tq( "pc" ), Occur.SHOULD );
- bq.add( pqF( "personal", "computer" ), Occur.SHOULD );
- FieldQuery fq = new FieldQuery( bq, true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- FieldPhraseList fpl = new FieldPhraseList( stack, fq );
- assertEquals( 1, fpl.phraseList.size() );
- assertTrue( fpl.phraseList.get( 0 ).toString().indexOf( "(1.0)((3,5))" ) > 0 );
- assertEquals( 3, fpl.phraseList.get( 0 ).getStartOffset() );
- assertEquals( 5, fpl.phraseList.get( 0 ).getEndOffset() );
- }
-
- public void testFieldPhraseListIndex2w1wSearch1term() throws Exception {
- makeIndex2w1w();
-
- FieldQuery fq = new FieldQuery( tq( "pc" ), true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- FieldPhraseList fpl = new FieldPhraseList( stack, fq );
- assertEquals( 1, fpl.phraseList.size() );
- assertEquals( "pc(1.0)((3,20))", fpl.phraseList.get( 0 ).toString() );
- assertEquals( 3, fpl.phraseList.get( 0 ).getStartOffset() );
- assertEquals( 20, fpl.phraseList.get( 0 ).getEndOffset() );
- }
-
- public void testFieldPhraseListIndex2w1wSearch1phrase() throws Exception {
- makeIndex2w1w();
-
- FieldQuery fq = new FieldQuery( pqF( "personal", "computer" ), true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- FieldPhraseList fpl = new FieldPhraseList( stack, fq );
- assertEquals( 1, fpl.phraseList.size() );
- assertEquals( "personalcomputer(1.0)((3,20))", fpl.phraseList.get( 0 ).toString() );
- assertEquals( 3, fpl.phraseList.get( 0 ).getStartOffset() );
- assertEquals( 20, fpl.phraseList.get( 0 ).getEndOffset() );
- }
-
- public void testFieldPhraseListIndex2w1wSearch1partial() throws Exception {
- makeIndex2w1w();
-
- FieldQuery fq = new FieldQuery( tq( "computer" ), true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- FieldPhraseList fpl = new FieldPhraseList( stack, fq );
- assertEquals( 1, fpl.phraseList.size() );
- assertEquals( "computer(1.0)((3,20))", fpl.phraseList.get( 0 ).toString() );
- assertEquals( 3, fpl.phraseList.get( 0 ).getStartOffset() );
- assertEquals( 20, fpl.phraseList.get( 0 ).getEndOffset() );
- }
-
- public void testFieldPhraseListIndex2w1wSearch1term1phrase() throws Exception {
- makeIndex2w1w();
-
- BooleanQuery bq = new BooleanQuery();
- bq.add( tq( "pc" ), Occur.SHOULD );
- bq.add( pqF( "personal", "computer" ), Occur.SHOULD );
- FieldQuery fq = new FieldQuery( bq, true, true );
- FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
- FieldPhraseList fpl = new FieldPhraseList( stack, fq );
- assertEquals( 1, fpl.phraseList.size() );
- assertTrue( fpl.phraseList.get( 0 ).toString().indexOf( "(1.0)((3,20))" ) > 0 );
- assertEquals( 3, fpl.phraseList.get( 0 ).getStartOffset() );
- assertEquals( 20, fpl.phraseList.get( 0 ).getEndOffset() );
- }
-
- private void makeIndex1w() throws Exception {
- // 11111111112
- // 012345678901234567890
- // I'll buy a Macintosh
- // Mac
- // MacBook
- // 0 1 2 3
- makeSynonymIndex( "I'll buy a Macintosh",
- t("I'll",0,4),
- t("buy",5,8),
- t("a",9,10),
- t("Macintosh",11,20),t("Mac",11,20,0),t("MacBook",11,20,0));
- }
-
- private void makeIndex1w2w() throws Exception {
- // 1111111
- // 01234567890123456
- // My pc was broken
- // personal computer
- // 0 1 2 3
- makeSynonymIndex( "My pc was broken",
- t("My",0,2),
- t("pc",3,5),t("personal",3,5,0),t("computer",3,5),
- t("was",6,9),
- t("broken",10,16));
- }
-
- private void makeIndex2w1w() throws Exception {
- // 1111111111222222222233
- // 01234567890123456789012345678901
- // My personal computer was broken
- // pc
- // 0 1 2 3 4
- makeSynonymIndex( "My personal computer was broken",
- t("My",0,2),
- t("personal",3,20),t("pc",3,20,0),t("computer",3,20),
- t("was",21,24),
- t("broken",25,31));
- }
-
- void makeSynonymIndex( String value, Token... tokens ) throws Exception {
- Analyzer analyzer = new TokenArrayAnalyzer( tokens );
- make1dmfIndex( analyzer, value );
- }
-
- public static Token t( String text, int startOffset, int endOffset ){
- return t( text, startOffset, endOffset, 1 );
- }
-
- public static Token t( String text, int startOffset, int endOffset, int positionIncrement ){
- Token token = new Token( text, startOffset, endOffset );
- token.setPositionIncrement( positionIncrement );
- return token;
- }
-
- public static final class TokenArrayAnalyzer extends Analyzer {
- Token[] tokens;
- public TokenArrayAnalyzer( Token... tokens ){
- this.tokens = tokens;
- }
-
- @Override
- public TokenStream tokenStream(String fieldName, Reader reader) {
- TokenStream ts = new TokenStream(Token.TOKEN_ATTRIBUTE_FACTORY) {
- final AttributeImpl reusableToken = (AttributeImpl) addAttribute(CharTermAttribute.class);
- int p = 0;
-
- @Override
- public boolean incrementToken() throws IOException {
- if( p >= tokens.length ) return false;
- clearAttributes();
- tokens[p++].copyTo(reusableToken);
- return true;
- }
- };
- return ts;
- }
- }
-}