2017-05-03 7 views
0

検索テキストにフレーズの最後に「AND」が含まれているとエラーが表示されます。が見つかりました "<EOF>" Lucene.net 3.0.3 QueryParserエラー

SEARCHQUERY: "テキストAND"

private static Query parseQuery(string searchQuery, QueryParser parser) 
    { 
     Query query; 
     try 
     { 
     query = parser.Parse(searchQuery.Trim()); 
     } 
     catch (ParseException e) 
     { 
     query = parser.Parse(QueryParser.Escape(searchQuery.Trim())); 
     } 
     return query; 
    } 

答えて

0

は、それが私のすべてのシナリオをカバーして更新しました。

私の問題はです。です。私は例外を取得すると、私は小文字のラスターで検索クエリを置き換えます。それは私の場合で動作

searchQuery:"text and" 

と私のすべてのシナリオをカバー:

searchQuery:"Text AND" 

小文字でそれを交換した後、それは次のようになります。

private static Query parseQuery(string searchQuery, QueryParser parser) 
{ 
    Query query; 
    try 
    { 
     query = parser.Parse(searchQuery); 
    } 
    catch (ParseException e) 
    { 
     query = null; 
    } 
    if (query == null) 
    { 
     string replacedQuery; 
     cooked = Regex.Replace(searchQuery, @"\B[A-Z]", m => "" + m.ToString().ToLower()); 
     cooked = Regex.Replace(cooked, "[^a-zA-Z0-9]+", " "); 
     query = parser.Parse(replacedQuery); 
    } 
    return query; 
} 

今、このソリューションは、以下の次のクエリのタイプのために働く:

  • "テキスト+"
  • "テキスト=" 注:文字列の末尾に特殊文字。
  • "テキストAND" 注:文字列の末尾にある任意のブール演算子。
  • 「テキストとデータ」

    注:すべてのクエリ構文を提供lucene.netとして、クエリの構文を残りが作業している(つまり、フレーズ構文、ブール演算子の構文、ワイルドカードクエリ)

+0

これは、解決策ではありません。 @searchQuery = "Text +"の場合はどうなりますか?あなたの正規表現の処理は別のParseExceptionをスローします。クエリの構築を制御できる場合は、修正プログラムが存在します。それ以外の場合は、エラーを呼び出し側に返す必要があります。 – RamblinRose

+0

@RamblinRoseいずれの例も解決策につながります。ありがとうございました –

+0

[QueryParser.Escape](https://lucenenet.apache.org/docs/3.0.3/da/d66/class_lucene_1_1_net_1_1_query_parsers_1_1_query_parser.html#a648ae6a6b1d598c0a799e3654c67e513)も使用できますし、実際にそれを処理します。私は好奇心がそそられていて、私の経験は私に問いかけるように言います。 "AND"はどこから由来していますか?あなたは索引付けしていますか? – RamblinRose

関連する問題