Why does Lucene (Hibernate Search) ignore my own operator? -
i updated hibernate search 5.0.0.alpha4, uses lucene 4.8.1.
i still utilize same codes create search query before (i used lucene 3.3 before updating, old version:)). noticed problem, new version ignores operator , uses default operator time, codes worked fine in older version:
for example: set "and" default operator. typed "java or php" in search field. , made breakpoint @ line of queryparser.parse(searchstring). tells me searchstring "java or php", correct. created searchquery after queryparser.parse() is:
+(title:java) +(title:php)
which means lucene deals searchstring "and" logic!
i don't know if bug of newer lucene or did wrong.
here codes:
standardanalyzer analyzer = new standardanalyzer( version.lucene_47); multifieldqueryparser queryparser = new multifieldqueryparser( version.lucene_47, mysearchfields, analyzer); queryparser.setallowleadingwildcard(true); queryparser.setdefaultoperator(mydefaultoperator); queryparser.setautogeneratephrasequeries(true); query searchquery = queryparser.parse(searchstring); fulltextquery jpaquery = getfulltextentitymanager() .createfulltextquery(searchquery, entities); jpaquery.setmaxresults(oracle_maximum_elements_in_expression);
boolean operators must in caps. is: java or php
correct, java or php
not.
to explain going on, without or
beingness in caps, it's treated term. and
beingness default operator, makes it:
java , or , php
or, like
+(title:java) +(title:or) +(title:php)
however, or
standard stop word, , eliminated during analysis of query, , left simply:
+(title:java) +(title:php)
lucene hibernate-search
No comments:
Post a Comment