3

数値の Lucene インデックス付きフィールドがいくつかあります。

60000
78500
105000

次のように、LUKE を使用して 78500 をクエリするとします。

price:78500

正しいレコードが返されますが、3 つのレコードすべてを範囲として返そうとすると、結果が得られません。

price:[60000 TO 105000]

数値は Lucene によって処理される文字列であるため、これはパディングが原因であることに気付きましたが、3 つのレコードを返すために LUKE に何を入力する必要があるかを知りたいだけです。

助けてくれてありがとう。

4

4 に答える 4

11

フィールドが NumericField としてインデックス化されている場合は、クエリ パーサー タブで [XML クエリ パーサーを使用] オプションを使用し、Luke の 3.5 バージョンを使用する必要があります。

https://code.google.com/p/luke/downloads/detail?name=lukeall-3.5.0.jar&can=2&q=

文字列と数値フィールドを使用したクエリの例は次のとおりです。

<BooleanQuery>
<Clause fieldName="colour" occurs="must">
    <TermQuery>rojo</TermQuery>
</Clause>
<Clause fieldName="price" occurs="must">
    <NumericRangeQuery type="int" lowerTerm="4000" upperTerm="5000" />
</Clause>
</BooleanQuery>
于 2013-05-06T16:20:46.477 に答える
3

これに使用した解決策は、price に入力された値をパディング形式でインデックスに追加する必要があるというものでした。次に、うまく機能する新しいパディングされた値を照会するだけです。したがって、インデックスの新しい値は次のとおりです。

060000
078500
105000

このソリューションは、Umbraco の Examine 検索の問題に関連付けられているため、数値ベースの範囲検索を実装する方法のスレッドがフォーラムにあり、これが必要な場合は、エンド ツー エンドのウォーク スルーとともにここにあります。

アンブラコ フォーラム スレッド

于 2011-02-07T10:31:35.107 に答える
1
  1. 表示したすべての数字の桁数が同じであるため、ゼロ パディングはこの特定のクエリには含まれません。
  2. 表示された範囲クエリでは、範囲の 2 番目の部分にゼロが多すぎます
  3. したがって、表示したデータのクエリは次のようになりますprice:[10500 TO 78500]

お役に立てれば、

于 2011-02-03T21:27:09.030 に答える
1

これらのフィールドは s としてインデックス付けされていると仮定しますNumericField。それらの問題は、Lucene/Luke が数値クエリを自動的に解析する方法を知らないことです。Lucene をオーバーライドQueryParserし、これらの数値をどのように解釈するか独自のロジックを提供する必要があります。

私が知る限り、Luke はカスタム パーサーに固執することを許可しており、CLASSPATH に存在する必要があるだけです。

Lucene メーリング リストの次のスレッドをご覧ください。

http://mail-archives.apache.org/mod_mbox/lucene-java-user/201102.mbox/%3CAANLkTi=XUpyw09tcbjuTzNRpMJa730Cq-6_1agMAjYz6@mail.gmail.com%3E

于 2011-02-05T10:45:18.927 に答える