/** * Copyright 2008 - 2009 Pro-Netics S.P.A. * * Licensed 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 it.pronetics.madstore.repository.index.impl; import it.pronetics.madstore.repository.index.IndexManager; import it.pronetics.madstore.repository.index.SearchResult; import it.pronetics.madstore.repository.test.util.Utils; import it.pronetics.madstore.repository.util.PagingList; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.springframework.test.AbstractDependencyInjectionSpringContextTests; public class IndexManagerTest extends AbstractDependencyInjectionSpringContextTests { private static final String COLLECTION_KEY = "testCollection"; private IndexManager indexManager; public IndexManagerTest() { setAutowireMode(AUTOWIRE_BY_NAME); } public void setIndexManager(IndexManager indexManager) { this.indexManager = indexManager; } public void testIndexThenSearchCollectionByFullTextThenDelete() { List<String> terms = new ArrayList<String>(); terms.add("textToFind1"); indexManager.index(COLLECTION_KEY, "entry1", Utils.getDoc("luceneentry1.xml").getDocumentElement()); indexManager.index(COLLECTION_KEY, "entry2", Utils.getDoc("luceneentry2.xml").getDocumentElement()); indexManager.index(COLLECTION_KEY, "entry3", Utils.getDoc("luceneentry3.xml").getDocumentElement()); List<SearchResult> elements = indexManager.searchCollectionByFullText(COLLECTION_KEY, terms, 0, 0); assertEquals(1, elements.size()); indexManager.delete(COLLECTION_KEY, "entry1"); indexManager.delete(COLLECTION_KEY, "entry2"); indexManager.delete(COLLECTION_KEY, "entry3"); elements = indexManager.searchCollectionByFullText(COLLECTION_KEY, terms, 0, 0); assertEquals(0, elements.size()); } public void testIndexThenSearchCollectionByFullTextWithPaginationThenDelete() { List<String> terms = new ArrayList<String>(); terms.add("bla"); indexManager.index(COLLECTION_KEY, "entry1", Utils.getDoc("luceneentry1.xml").getDocumentElement()); indexManager.index(COLLECTION_KEY, "entry2", Utils.getDoc("luceneentry2.xml").getDocumentElement()); indexManager.index(COLLECTION_KEY, "entry3", Utils.getDoc("luceneentry3.xml").getDocumentElement()); PagingList<SearchResult> elements = indexManager.searchCollectionByFullText(COLLECTION_KEY, terms, 1, 0); List<String> keys = Arrays.<String> asList(elements.get(0).getEntryKey(), elements.get(1).getEntryKey()); assertEquals(2, elements.size()); assertTrue(keys.contains("entry2")); assertTrue(keys.contains("entry3")); assertEquals(3, elements.getTotal()); assertEquals(LuceneIndexManager.DEFAULT_MAX_SEARCH_RESULTS, elements.getMax()); assertEquals(1, elements.getOffset()); elements = indexManager.searchCollectionByFullText(COLLECTION_KEY, terms, 0, 1); assertEquals(1, elements.size()); assertEquals(COLLECTION_KEY, elements.get(0).getColletionKey()); assertEquals("entry1", elements.get(0).getEntryKey()); assertEquals(3, elements.getTotal()); assertEquals(1, elements.getMax()); assertEquals(0, elements.getOffset()); elements = indexManager.searchCollectionByFullText(COLLECTION_KEY, terms, 1, 1); assertEquals(1, elements.size()); assertEquals(COLLECTION_KEY, elements.get(0).getColletionKey()); assertEquals("entry2", elements.get(0).getEntryKey()); assertEquals(3, elements.getTotal()); assertEquals(1, elements.getMax()); assertEquals(1, elements.getOffset()); indexManager.delete(COLLECTION_KEY, "entry1"); indexManager.delete(COLLECTION_KEY, "entry2"); indexManager.delete(COLLECTION_KEY, "entry3"); elements = indexManager.searchCollectionByFullText(COLLECTION_KEY, terms, 0, 0); assertEquals(0, elements.getTotal()); assertEquals(LuceneIndexManager.DEFAULT_MAX_SEARCH_RESULTS, elements.getMax()); assertEquals(0, elements.getOffset()); assertEquals(0, elements.size()); } public void testIndexThenSearchCollectionByFullTextWithBoostThenDelete() { List<String> terms = new ArrayList<String>(); terms.add("textToFind1"); indexManager.index(COLLECTION_KEY, "entry1", Utils.getDoc("luceneentry1.xml").getDocumentElement()); indexManager.index(COLLECTION_KEY, "entry11", Utils.getDoc("luceneentry11.xml").getDocumentElement()); List<SearchResult> elements = indexManager.searchCollectionByFullText(COLLECTION_KEY, terms, 0, 0); assertEquals(2, elements.size()); assertEquals(COLLECTION_KEY, elements.get(0).getColletionKey()); assertEquals("entry1", elements.get(0).getEntryKey()); assertEquals(COLLECTION_KEY, elements.get(1).getColletionKey()); assertEquals("entry11", elements.get(1).getEntryKey()); indexManager.delete(COLLECTION_KEY, "entry1"); indexManager.delete(COLLECTION_KEY, "entry11"); elements = indexManager.searchCollectionByFullText(COLLECTION_KEY, terms, 0, 0); assertEquals(0, elements.size()); } public void testIndexThenSearchCollectionByFullTextWithTwoTermsInLogicalANDOnTheSameField() { List<String> terms = new ArrayList<String>(); terms.add("textToFind1"); terms.add("here"); indexManager.index(COLLECTION_KEY, "entry1", Utils.getDoc("luceneentry1.xml").getDocumentElement()); indexManager.index(COLLECTION_KEY, "entry2", Utils.getDoc("luceneentry2.xml").getDocumentElement()); List<SearchResult> elements = indexManager.searchCollectionByFullText(COLLECTION_KEY, terms, 0, 0); assertEquals(1, elements.size()); assertEquals(COLLECTION_KEY, elements.get(0).getColletionKey()); assertEquals("entry1", elements.get(0).getEntryKey()); indexManager.delete(COLLECTION_KEY, "entry1"); indexManager.delete(COLLECTION_KEY, "entry2"); elements = indexManager.searchCollectionByFullText(COLLECTION_KEY, terms, 0, 0); assertEquals(0, elements.size()); } public void testIndexThenSearchCollectionByFullTextWithTwoTermsInLogicalANDOnDifferentFields() { List<String> terms = new ArrayList<String>(); terms.add("textToFind1"); terms.add("bla"); indexManager.index(COLLECTION_KEY, "entry1", Utils.getDoc("luceneentry1.xml").getDocumentElement()); indexManager.index(COLLECTION_KEY, "entry2", Utils.getDoc("luceneentry2.xml").getDocumentElement()); List<SearchResult> elements = indexManager.searchCollectionByFullText(COLLECTION_KEY, terms, 0, 0); assertEquals(1, elements.size()); assertEquals(COLLECTION_KEY, elements.get(0).getColletionKey()); assertEquals("entry1", elements.get(0).getEntryKey()); indexManager.delete(COLLECTION_KEY, "entry1"); indexManager.delete(COLLECTION_KEY, "entry2"); elements = indexManager.searchCollectionByFullText(COLLECTION_KEY, terms, 0, 0); assertEquals(0, elements.size()); } public void testSearchCollectionByFullTextIsCaseSensitiveForTheCollectionKey() { List<String> terms = new ArrayList<String>(); terms.add("textToFind1"); indexManager.index(COLLECTION_KEY, "entry1", Utils.getDoc("luceneentry1.xml").getDocumentElement()); List<SearchResult> elements = indexManager.searchCollectionByFullText(COLLECTION_KEY.toLowerCase(), terms, 0, 0); assertEquals(0, elements.size()); indexManager.delete(COLLECTION_KEY, "entry1"); elements = indexManager.searchCollectionByFullText(COLLECTION_KEY, terms, 0, 0); assertEquals(0, elements.size()); } public void testSearchCollectionByFullTextIsCaseInsensitiveForTheSearchTerms() { List<String> terms = new ArrayList<String>(); terms.add("textToFind1".toLowerCase()); indexManager.index(COLLECTION_KEY, "entry1", Utils.getDoc("luceneentry1.xml").getDocumentElement()); List<SearchResult> elements = indexManager.searchCollectionByFullText(COLLECTION_KEY, terms, 0, 0); assertEquals(1, elements.size()); assertEquals(COLLECTION_KEY, elements.get(0).getColletionKey()); assertEquals("entry1", elements.get(0).getEntryKey()); indexManager.delete(COLLECTION_KEY, "entry1"); elements = indexManager.searchCollectionByFullText(COLLECTION_KEY, terms, 0, 0); assertEquals(0, elements.size()); } @Override protected String[] getConfigLocations() { return new String[]{"classpath:repositoryApplicationContext.xml"}; } }