2016-08-10 15 views
0

まったく基本的なタスク:DateTimeおよびというフィールドをインデックスし、後でそれらの範囲と正確な検索を実行します。Lucene.NET:DateTimeおよびTimeSpanフィールドのインデックス作成および検索のための推奨方法

Lucene.NETの古いバージョンを参照するチュートリアルがインターネット上にあります。日付と時刻をint型、long型、文字列型で格納することを推奨するマニュアル。 NumericRangeQueriesを使用して助言する文書。ブログ記事はTermRangeQueriesを推奨します。 GitHubは、数値は行く方法であると言っています。すべてそのメモリが管理され、ガベージコレクトされるの愛のために

、のフルテキスト検索の旅に乗り出すそれらの貧しい人々の魂のための超包括的かつ超最新の参照をコンパイルしてみましょう:

Analyzerがあるべきと日付と時刻のインデックスを作成する際に を使用すべきではない何
  1. 日付と時刻がに格納する必要がありますどのよう
  2. DocumentField種類が
  3. がどのように範囲QUを行うために使用すべきか標準QueryParser
  4. を使用して日付DateTime値)とTimeSpan値)
    • ためeries ... ...手動Queryオブジェクト
    • を構築する...あなた自身を書きますQueryParser
  5. 操作方法完全一致 fo R標準QueryParser
  6. を使用して日付DateTime値)とTimeSpan値)
    • ... ...手動Queryオブジェクト
    • を構築する...あなた自身のQueryParser
    • を書きます

答えて

1

実際にこの種のフォーラムo議論する(SOはQ & Aのためである)。私はうれしくwikiで協力したいと思います...しかし、いくつかのコメントはあなたを得るために。

最終的な記事がない理由は、答えが「それに依存する」ためです。いつものように、クエリストアでは、クエリはどのようにクエリしたいかによって答えが異なります。

ことの一つは、は常にはUTC

私は通常、数値フィールドを使用して賛成に変換...確かです。意味を日付に変換します。ですから、2020年8月10日= 20160810です。DatetimesはHH、MM、SSを追加するためだけに拡張されています。いくつかのユーティリティ関数はこれを簡単にします。

私は、各フィールドの「精度」を定義できるシステムを持っていました。

これにより、人間の読み取り/書き込みが可能になり、範囲が有効になります。それは、範囲外のクエリがきれいではないことを意味しますが。

同じスキームを、UN_TOKENIZEDまたはKeywordアナライザの文字列フィールドで使用できます。この場合、入力された日付を解析して上記の標準形式またはソート可能な標準ISO形式(範囲が動作するように)に変換するTokenFilter/Analyzerを記述することができます。

これらの選択肢のうちのいくつかは、検索側がどのように機能するかに依存します...それは文字列としてクエリを解析する必要がある場合

は、LuceneのQueryParserは限定的なものを少しです。私は自分のパーサを持っていました(Irony.netに基づいています)。

APIの背後にある場合、この部分をfrom/toに分けて、その部分を手動で作成し、BooleanQueryまたはFilterを使用して解析することができます(同じ日付/範囲を再利用する場合はFilterが良い)。

だから、あなたはそれを持っている...無回答の答え。 「1つのサイズはすべてに適合します」というものはありません。それは、データウェアハウスを設計するようなものです。デザインは、作成するクエリ/レポートによって多少異なります。

関連する問題