2011-01-19 6 views
0

私は、ウェブサイトのさまざまなセクションにイベント項目をインデックスするインデックスを作成しました。 このアイテムは、このような構造では、ウェブサイト上にある:Lucene.net - 数値セクションでファイルされたパスを照会する方法は?

/Start/Section1/Events/2011/12/25/X-mas 
/Start/Section2/Events/2012/01/01/New-years-day 

これらのパスは、インデックス内のフィールドpathに格納されています。

スタートページには、すべてのセクションのイベントの概要が必要です。 私がセクションにいるとき、そのセクションの下に置かれたイベントだけが必要です。

私はこのようなbooleanquery追加:

QueryParser queryParser = new QueryParser("path", analyzer); 
Query query = queryParser.Parse(startPath); 
completeQuery.Add(query, BooleanClause.Occur.MUST); 

「パス」はカスタムインデックスのスクリプトを介して追加されたフィールドです。

string startPath = "/Start"; 

これは、通常、私にパスがためのアイテムを盗んするには、「/スタート」

で始まるすべてのアイテムを与える:私は使用して私のインデックスを検索しますスタートページのためのアイテムを盗んする

1節私が使用して私のインデックスを検索します:

string startPath = "/Start/Section1/Events"; 

これは、通常、私にパスが「/スタート/ 1節/イベント」

で始まるすべてのアイテムを提供します

私はこのソリューションをニュースアイテム用に実装しましたが、それは問題なく動作します。イベント項目の場合は表示されません。 インデックスを検索するとヒットしません。問題は、最後の3つのフォルダ名が数値であることです。 フォルダ(fe. 2011,12,25)の名前をテキスト(2千、12、25)に変更すると、ヒットを返します。

フォルダ名を数値にしたまま結果を返すようにインデックスを取得するにはどうすればよいですか?

+3

どのようなタイプの分析装置を使用していますか?これは 'StandardAnalyzer'イモで動作するはずです – BrokenGlass

答えて

0

あなたのパスにはCharTokenizerを使用し、にはIsTokenChar(char c)を返します。

このようにして、パスの各部分が個別のTokenであることを確認できます。

関連する問題