You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by "G.Long" <jd...@gmail.com> on 2012/11/07 16:50:56 UTC
case-insensitive index and queries
Hi :)
I would like the "text" field of my index to be case-insensitive.
I'm using a PerFieldAnalyzerWrapper with a standardAnalyzer for this
field for both indexing and querying. I read that StandardAnalyzer uses
LowerCaseFilter to lowercase the value of the field but when I run a
query, it doesn' work.
Here is my query :
IndexSearcher isearcher = new IndexSearcher(directory);
BooleanQuery query = new BooleanQuery();
PerFieldAnalyzerWrapper pfaWrapper = getPerfFieldAnalyzer();
QueryParser parser = new QueryParser(Version.LUCENE_31, key, pfaWrapper);
parser.setDefaultOperator(QueryParser.AND_OPERATOR);
Query param = parser.parse(value);
query.add(param, BooleanClause.Occur.MUST);
TopFieldCollector collector = TopFieldCollector.create(new
Sort(SortField.FIELD_DOC), 200000, true, false, false, false);
isearcher.search(query, collector);
The getPerFieldAnalyzer() methods looks like :
if(perFieldAnalyzerWrapper==null){
perFieldAnalyzerWrapper = new PerFieldAnalyzerWrapper(new
KeywordAnalyzer());
perFieldAnalyzerWrapper.addAnalyzer(FIELD_TEXT, new
StandardAnalyzer(Version.LUCENE_31));
perFieldAnalyzerWrapper.addAnalyzer(FIELD_TITLE, new
StandardAnalyzer(Version.LUCENE_31));
}
return perFieldAnalyzerWrapper;
Is there something wrong with this code?
Thank you :)
---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org
Re: case-insensitive index and queries
Posted by "G.Long" <jd...@gmail.com>.
Thank you for the tips. I looked at the index and the query and nothing
seemed to be wrong. Then I realized that someone put a condition in the
code after getting the results of the query. this condition removed docs
which did not contain the exact words of the query. This condition was
case sensitive u_u.
Problem solved :)
Le 07/11/2012 17:09, Ian Lea a écrit :
> From a glance the code looks OK, but there's lots you're not showing
> that could cause it not to work - whatever you mean by that. Fails to
> get hits on docs you think are in the index?
>
> Look at the index with Luke to see what actually has been indexed.
>
> Look at Query.toString() to see how the query has been parsed.
>
> Read the bit of the FAQ titled something like "Why are my searches not
> working?".
>
>
> --
> Ian.
>
>
> On Wed, Nov 7, 2012 at 3:50 PM, G.Long <jd...@gmail.com> wrote:
>> Hi :)
>>
>> I would like the "text" field of my index to be case-insensitive.
>> I'm using a PerFieldAnalyzerWrapper with a standardAnalyzer for this field
>> for both indexing and querying. I read that StandardAnalyzer uses
>> LowerCaseFilter to lowercase the value of the field but when I run a query,
>> it doesn' work.
>>
>> Here is my query :
>>
>> IndexSearcher isearcher = new IndexSearcher(directory);
>> BooleanQuery query = new BooleanQuery();
>> PerFieldAnalyzerWrapper pfaWrapper = getPerfFieldAnalyzer();
>>
>> QueryParser parser = new QueryParser(Version.LUCENE_31, key, pfaWrapper);
>> parser.setDefaultOperator(QueryParser.AND_OPERATOR);
>> Query param = parser.parse(value);
>> query.add(param, BooleanClause.Occur.MUST);
>>
>> TopFieldCollector collector = TopFieldCollector.create(new
>> Sort(SortField.FIELD_DOC), 200000, true, false, false, false);
>> isearcher.search(query, collector);
>>
>>
>> The getPerFieldAnalyzer() methods looks like :
>>
>> if(perFieldAnalyzerWrapper==null){
>> perFieldAnalyzerWrapper = new PerFieldAnalyzerWrapper(new
>> KeywordAnalyzer());
>> perFieldAnalyzerWrapper.addAnalyzer(FIELD_TEXT, new
>> StandardAnalyzer(Version.LUCENE_31));
>> perFieldAnalyzerWrapper.addAnalyzer(FIELD_TITLE, new
>> StandardAnalyzer(Version.LUCENE_31));
>> }
>> return perFieldAnalyzerWrapper;
>>
>> Is there something wrong with this code?
>>
>> Thank you :)
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
>> For additional commands, e-mail: java-user-help@lucene.apache.org
>>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org
Re: case-insensitive index and queries
Posted by Ian Lea <ia...@gmail.com>.
>From a glance the code looks OK, but there's lots you're not showing
that could cause it not to work - whatever you mean by that. Fails to
get hits on docs you think are in the index?
Look at the index with Luke to see what actually has been indexed.
Look at Query.toString() to see how the query has been parsed.
Read the bit of the FAQ titled something like "Why are my searches not
working?".
--
Ian.
On Wed, Nov 7, 2012 at 3:50 PM, G.Long <jd...@gmail.com> wrote:
> Hi :)
>
> I would like the "text" field of my index to be case-insensitive.
> I'm using a PerFieldAnalyzerWrapper with a standardAnalyzer for this field
> for both indexing and querying. I read that StandardAnalyzer uses
> LowerCaseFilter to lowercase the value of the field but when I run a query,
> it doesn' work.
>
> Here is my query :
>
> IndexSearcher isearcher = new IndexSearcher(directory);
> BooleanQuery query = new BooleanQuery();
> PerFieldAnalyzerWrapper pfaWrapper = getPerfFieldAnalyzer();
>
> QueryParser parser = new QueryParser(Version.LUCENE_31, key, pfaWrapper);
> parser.setDefaultOperator(QueryParser.AND_OPERATOR);
> Query param = parser.parse(value);
> query.add(param, BooleanClause.Occur.MUST);
>
> TopFieldCollector collector = TopFieldCollector.create(new
> Sort(SortField.FIELD_DOC), 200000, true, false, false, false);
> isearcher.search(query, collector);
>
>
> The getPerFieldAnalyzer() methods looks like :
>
> if(perFieldAnalyzerWrapper==null){
> perFieldAnalyzerWrapper = new PerFieldAnalyzerWrapper(new
> KeywordAnalyzer());
> perFieldAnalyzerWrapper.addAnalyzer(FIELD_TEXT, new
> StandardAnalyzer(Version.LUCENE_31));
> perFieldAnalyzerWrapper.addAnalyzer(FIELD_TITLE, new
> StandardAnalyzer(Version.LUCENE_31));
> }
> return perFieldAnalyzerWrapper;
>
> Is there something wrong with this code?
>
> Thank you :)
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org