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 TK Solr <tk...@sonic.net> on 2021/05/21 04:51:40 UTC

MLTQuery not working; seeking debugging tips

I am having difficulty using MoreLikeThisQuery with an n-gram analyzer as its 
analyzer.
A test query isn't hitting any document in a unit test case.
Is there any debugging method to use to understand why there is not hit?

Because the test code uses a RAMDirectory, I cannot use Luke to see if the index 
was made correctly.

This is a snippet of the query code:

MoreLikeThisQuery mltQuery = new MoreLikeThisQuery(queryText, new String[] 
{"source"}, //TODO: Make this array constant defaultFuzzyAnalyzer, "source"); // 
defaultFuzzyAnalyzer is a 4-gram analyzer based on NGramTokenFilter. 
mltQuery.setMinTermFrequency(1); mltQuery.setMinDocFreq(1); 
mltQuery.setPercentTermsToMatch(threshold);mltQuery.setMaxQueryTerms(Integer.MAX_VALUE); 
TopDocs topDocs = indexSearcher.search(mltQuery, max);



Thanks.

TK


Re: MLTQuery not working; seeking debugging tips

Posted by TK Solr <tk...@sonic.net>.
I don't know why the code block in my first post lost newlines. Let me try again:

MoreLikeThisQuery mltQuery = new MoreLikeThisQuery(queryText, new String[] 
{"source"}, defaultFuzzyAnalyzer, "source"); // defaultFuzzyAnalyzer is a 4-gram 
analyzer based on NGramTokenFilter.

mltQuery.setMinTermFrequency(1);

mltQuery.setMinDocFreq(1);

mltQuery.setPercentTermsToMatch(threshold);

mltQuery.setMaxQueryTerms(Integer.MAX_VALUE);

TopDocs topDocs = indexSearcher.search(mltQuery, max);


But after posting this, I realized that I could use IndexSearcher#explain() as:

Explanation expl = indexSearcher.explain(mltQuery, docId); 
System.out.printf("docId=%d; expl=%s\n", docId, expl.toString());


If there are better ways to debug, please let me know.

TK

On 5/20/21 9:51 PM, TK Solr wrote:
> I am having difficulty using MoreLikeThisQuery with an n-gram analyzer as its 
> analyzer.
> A test query isn't hitting any document in a unit test case.
> Is there any debugging method to use to understand why there is not hit?
>
> Because the test code uses a RAMDirectory, I cannot use Luke to see if the 
> index was made correctly.
>
> This is a snippet of the query code:
>
> MoreLikeThisQuery mltQuery = new MoreLikeThisQuery(queryText, new String[] 
> {"source"}, //TODO: Make this array constant defaultFuzzyAnalyzer, "source"); 
> // defaultFuzzyAnalyzer is a 4-gram analyzer based on NGramTokenFilter. 
> mltQuery.setMinTermFrequency(1); mltQuery.setMinDocFreq(1); 
> mltQuery.setPercentTermsToMatch(threshold);mltQuery.setMaxQueryTerms(Integer.MAX_VALUE); 
> TopDocs topDocs = indexSearcher.search(mltQuery, max);
>
>
>
> Thanks.
>
> TK
>
>