Saturday, 15 June 2013

Why does Lucene (Hibernate Search) ignore my own operator? -



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