Hello,
I am trying to get a fuzzy search to work, maybe I am not understanding
how it is supposed to work, can someone put me in the right direction?
It seems to be always doing an OR when I use BooleanClause.Occur.MUST
(for loop). Latest version of lucene.
eg for a term
stone brick
is it possible to do :
ston~ bric~
ie fuzzy matching ston AND bric. Small data set.
Cheers Greg
##
// Only searchable
document.add(new TextField(Constants.CONTENT_FIELD, content,
Field.Store.NO));
--
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(
new String[]{Constants.CONTENT_FIELD}, analyzer);
queryParser.setDefaultOperator(MultiFieldQueryParser.Operator.AND);
BooleanQuery.Builder bQuery = new BooleanQuery.Builder();
// Order lines only
bQuery.add(new TermQuery(orderLines), BooleanClause.Occur.MUST);
BooleanQuery.Builder bQueryF = new BooleanQuery.Builder();
for (String term : terms) {
// Fuzzy ~
bQueryF.add(queryParser.parse(term + "~"), BooleanClause.Occur.MUST);
// Term termfq = new Term(FieldConstants.CONTENT_FIELD, term);
// FuzzyQuery fq = new FuzzyQuery(termfq,2,1);
// bQueryF.add(fq, BooleanClause.Occur.MUST);
}
bQuery.add(bQueryF.build(), BooleanClause.Occur.MUST);
...
searchresults = searcher.search(bQuery.build(), nMax, sorter);
---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org
I am trying to get a fuzzy search to work, maybe I am not understanding
how it is supposed to work, can someone put me in the right direction?
It seems to be always doing an OR when I use BooleanClause.Occur.MUST
(for loop). Latest version of lucene.
eg for a term
stone brick
is it possible to do :
ston~ bric~
ie fuzzy matching ston AND bric. Small data set.
Cheers Greg
##
// Only searchable
document.add(new TextField(Constants.CONTENT_FIELD, content,
Field.Store.NO));
--
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(
new String[]{Constants.CONTENT_FIELD}, analyzer);
queryParser.setDefaultOperator(MultiFieldQueryParser.Operator.AND);
BooleanQuery.Builder bQuery = new BooleanQuery.Builder();
// Order lines only
bQuery.add(new TermQuery(orderLines), BooleanClause.Occur.MUST);
BooleanQuery.Builder bQueryF = new BooleanQuery.Builder();
for (String term : terms) {
// Fuzzy ~
bQueryF.add(queryParser.parse(term + "~"), BooleanClause.Occur.MUST);
// Term termfq = new Term(FieldConstants.CONTENT_FIELD, term);
// FuzzyQuery fq = new FuzzyQuery(termfq,2,1);
// bQueryF.add(fq, BooleanClause.Occur.MUST);
}
bQuery.add(bQueryF.build(), BooleanClause.Occur.MUST);
...
searchresults = searcher.search(bQuery.build(), nMax, sorter);
---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org