>Maybe ChineseAnalyzer did something that made the inconsistency?

Quite possibly. Assuming Luke works with Chinese, run Luke and examine your 
index, preferably when it just has a single document in it. That will show you 
the actual terms you have indexed which may or may not be the same as the words 
in your document.

Running Luke from the WebStart is easiest if it works for you - 
http://www.getopt.org/luke/luke.jnlp. It is a Java program, but will still work 
on indices created in .NET

Yours,
Moray


On Tue, Aug 25, 2009 at 4:11 PM, Moray
McConnachie<[email protected]> wrote:
> The analyzer is being applied through the query parser, but not in the term 
> query (term queries don't use analyzers). I don't know what the chinese 
> analyzer does, but in the case of many analyzers if applied also at indexing 
> this may result in terms being indexed which are not the same as the original 
> word, and therefore TermQuery will not necessarily retrieve a result.
>
> For example in English if you use snowball stemming in an analyzer, then the 
> word "government" will be indexed as "govern". A term query on "government" 
> will then fail.
>
> Frequently therefore to search successfully you must use QueryParser with the 
> same Analyzer. I see this problem a lot with first-time users.
>
> Index a single document containing only a few words, then use Luke 
> http://www.getopt.org/luke/ to see how the terms have actually been indexed 
> by your index code.
>
> In my own usage of Lucene I almost always use a MultiFieldAnalyzer to do the 
> indexing so that I can make sure some fields (usually keyword fields where 
> the exact word is important) are indexed without a "clever" analyzer, and 
> other fields (usually text fields) are indexed with a "clever" analyzer.
>
> I'm not sure how/whether you can pass a single term through an analyzer and 
> then turn it into a term query somehow.
>
> Yours,
> Moray
>
> -------------------------------------
> Moray McConnachie
> Director of IT    +44 1865 261 600
> Oxford Analytica  http://www.oxan.com
>
> -----Original Message-----
> From: Li Bing [mailto:[email protected]]
> Sent: 25 August 2009 02:56
> To: Granroth, Neal V.
> Cc: [email protected]
> Subject: Re: Query vs. BooleanQuery
>
> Dear Neal,
>
> I appreciate so much for your help!
>
> Even though I updated the code as follows, there are still no results for the 
> term-based search.
>
>        ......
>        IndexSearcher searcher = new IndexSearcher(fsDirectory);
>        Term term = new Term(searchField, searchKeyword);
>        TermQuery termQuery = new TermQuery(term);
>        Hits results = searcher.Search(termQuery);
>        ......
>
> However, the Query search got results. The searchKeyword is just an ordinary 
> word, no any special characters, since I just want to learn how to use Term 
> to use.
>
> Any particular requirements to generate the index? I can figure out the 
> problems.
>
> Thanks so much!
> LB
>
>
> On Tue, Aug 25, 2009 at 2:37 AM, Granroth, Neal 
> V.<[email protected]> wrote:
>>
>> The difference in operation would be due to differences in the search 
>> requested by the two sections of code.  What does searchKeyword contain?
>> QueryParser may be splitting the string into multiple terms.
>> The code shown for BooleanQuery will only work when searchKeyword is a 
>> single term.  That is, it will search for the text specified as a single 
>> term.
>>
>>
>> By the way, as the code shown for BooleanQuery only uses a single 
>> term, the clause Occur.MUST or Occur.Should is unimportant.  For a 
>> single term there is really no need for the BooleanQuery object at 
>> all, you could instead use the TermQuery object directly in the call 
>> to Search()
>>
>>
>> -- Neal
>>
>> -----Original Message-----
>> From: Li Bing [mailto:[email protected]]
>> Sent: Monday, August 24, 2009 1:12 PM
>> To: [email protected]
>> Cc: [email protected]
>> Subject: Re: Query vs. BooleanQuery
>>
>> I tried. But it still doesn't work.
>>
>> Thanks so much!
>> LB
>>
>> On Tue, Aug 25, 2009 at 1:20 AM, [email protected]<[email protected]> wrote:
>>> It is due to :
>>>
>>> booleanQuery.Add(termQuery, BooleanClause.Occur.MUST);
>>>
>>> Change it to
>>>
>>> booleanQuery.Add(termQuery, BooleanClause.Occur.SHOULD);
>>>
>>> and you'll see same results.
>>>
>>>
>>> Li Bing:
>>>>
>>>> Dear all,
>>>>
>>>> (The codes in the previous email have something specific in my 
>>>> applications. I made changes in this email)
>>>>
>>>> I tried to search using two approaches, Query and BooleanQuery. To 
>>>> my surprise, the two behaves different on the same index? Or I made 
>>>> something wrong?
>>>>
>>>> On the same index, Query can get results whereas BooleanQuery get NOTHING.
>>>> Why?
>>>>
>>>> The codes are shown as follows.
>>>>
>>>> Using Query,
>>>>
>>>>       ......
>>>>       IndexSearcher searcher = new IndexSearcher(fsDirectory);
>>>>       Analyzer chineseAnalyzer = new ChineseAnalyzer();
>>>>       QueryParser queryParser = new QueryParser(searchField, 
>>>> chineseAnalyzer);
>>>>       Query query = queryParser.Parse(searchKeyword);
>>>>       Hits results = searcher.Search(query);
>>>>       ......
>>>>
>>>> Using BooleanQuery,
>>>>
>>>>       ......
>>>>       IndexSearcher searcher = new IndexSearcher(fsDirectory);
>>>>       Term term = new Term(searchField, searchKeyword);
>>>>       TermQuery termQuery = new TermQuery(term);
>>>>       BooleanQuery booleanQuery = new BooleanQuery();
>>>>       booleanQuery.Add(termQuery, BooleanClause.Occur.MUST);
>>>>       Hits results = searcher.Search(booleanQuery);
>>>>       ......
>>>>
>>>> I think the codes should be correct. But why do they get different 
>>>> results on the same index?
>>>>
>>>> Thanks so much for your help!
>>>> LB
>>>>
>>>>
>>>>
>>>
>>>
>>
>
>
>


Reply via email to