8

Lucene の初心者はこちら。JavaクライアントでHibernateで使用していますが、特定のクエリでこのエラーが発生しています:

HSEARCH000146: The query string 'a' applied on field 'name' has no meaningfull tokens to  
be matched. Validate the query input against the Analyzer applied on this field.

検索は、結果セットが空の場合でも、他のすべてのクエリに対して正常に機能します。私のテストDBには、「a」のこのレコードがあります。ここで何が問題なのですか?

4

3 に答える 3

9

「a」はストップワードであり、StandardAnalyzer によってクエリから除外されます。ストップワードは、検索する言語で十分に一般的であり、検索結果を生成するのに意味があるとは見なされない単語です。短いリストですが、英語の「a」はそのうちの 1 つです。

アナライザーはその用語を削除し、存在する唯一の用語であるため、空のクエリを送信することになり、これは受け入れられず、検索は失敗します。

興味深いことに、これらは標準的な Lucene 英語のストップワードです。

"a", "an", "and", "are", "as", "at", "be", "but", "by",
"for", "if", "in", "into", "is", "it",
"no", "not", "of", "on", "or", "such",
"that", "the", "their", "then", "there", "these",
"they", "this", "to", "was", "will", "with"

ストップ ワードを削除したくない場合は、 を設定しAnalyzerないStopFilterか、空のストップ ワード セットを設定する必要があります。の場合、カスタム ストップ セットをコンストラクターStandardAnalyzerに渡すことができます。

Analyzer analyzer = new StandardAnalyzer(CharArraySet.EMPTY_SET);
于 2012-12-07T17:26:25.503 に答える
1

あなたが置くことができます

@Analyzer(impl=KeywordAnalyzer.class)

この問題を回避するためにあなたの分野に。

于 2016-06-30T03:40:45.167 に答える