# ====================================================================
# 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.
# ====================================================================
from lia.common.LiaTestCase import LiaTestCase
from lucene import Integer,\
IndexSearcher, Term, TermQuery, MatchAllDocsQuery, \
BooleanQuery, BooleanClause, CachingWrapperFilter, \
TermRangeFilter, NumericRangeFilter, FieldCacheRangeFilter, \
FieldCacheTermsFilter, QueryWrapperFilter, PrefixFilter
class FilterTest(LiaTestCase):
def setUp(self):
super(FilterTest, self).setUp()
self.allBooks = MatchAllDocsQuery()
self.searcher = IndexSearcher(self.directory, True)
scoreDocs = self.searcher.search(self.allBooks, 50).scoreDocs
self.numAllBooks = len(scoreDocs)
def testTermRangeFilter(self):
filter = TermRangeFilter("title2", "d", "j", True, True)
scoreDocs = self.searcher.search(self.allBooks, filter, 50).scoreDocs
self.assertEqual(3, len(scoreDocs))
def testNumericDateFilter(self):
filter = NumericRangeFilter.newIntRange("pubmonth",
Integer(198805),
Integer(198810),
True, True)
scoreDocs = self.searcher.search(self.allBooks, filter, 50).scoreDocs
self.assertEqual(1, len(scoreDocs))
def testFieldCacheRangeFilter(self):
filter = FieldCacheRangeFilter.newStringRange("title2", "d", "j",
True, True)
scoreDocs = self.searcher.search(self.allBooks, filter, 50).scoreDocs
self.assertEqual(3, len(scoreDocs))
filter = FieldCacheRangeFilter.newIntRange("pubmonth",
Integer(198805),
Integer(198810),
True, True)
scoreDocs = self.searcher.search(self.allBooks, filter, 50).scoreDocs
self.assertEqual(1, len(scoreDocs))
def testFieldCacheTermsFilter(self):
filter = FieldCacheTermsFilter("category",
["/health/alternative/chinese",
"/technology/computers/ai",
"/technology/computers/programming"])
scoreDocs = self.searcher.search(self.allBooks, filter, 50).scoreDocs
self.assertEqual(7, len(scoreDocs), "expected 7 hits")
def testQueryWrapperFilter(self):
categoryQuery = TermQuery(Term("category", "/philosophy/eastern"))
categoryFilter = QueryWrapperFilter(categoryQuery)
scoreDocs = self.searcher.search(self.allBooks, categoryFilter, 50).scoreDocs
self.assertEqual(1, len(scoreDocs), "only tao te ching")
def testSpanQueryFilter(self):
categoryQuery = TermQuery(Term("category", "/philosophy/eastern"))
categoryFilter = QueryWrapperFilter(categoryQuery)
scoreDocs = self.searcher.search(self.allBooks, categoryFilter, 50).scoreDocs
self.assertEqual(1, len(scoreDocs), "only tao te ching")
def testFilterAlternative(self):
categoryQuery = TermQuery(Term("category", "/philosophy/eastern"))
constrainedQuery = BooleanQuery()
constrainedQuery.add(self.allBooks, BooleanClause.Occur.MUST)
constrainedQuery.add(categoryQuery, BooleanClause.Occur.MUST)
scoreDocs = self.searcher.search(constrainedQuery, 50).scoreDocs
self.assertEqual(1, len(scoreDocs), "only tao te ching")
def testPrefixFilter(self):
prefixFilter = PrefixFilter(Term("category", "/technology/computers"))
scoreDocs = self.searcher.search(self.allBooks, prefixFilter, 50).scoreDocs
self.assertEqual(8, len(scoreDocs),
"only /technology/computers/* books")
def testCachingWrapper(self):
filter = TermRangeFilter("title2", "d", "j", True, True)
cachingFilter = CachingWrapperFilter(filter)
scoreDocs = self.searcher.search(self.allBooks, cachingFilter, 50).scoreDocs
self.assertEqual(3, len(scoreDocs))
|