3

ドキュメントが可能な値のコレクションに特定のフィールド値を持っているかどうかを検索しようとしています。

field:[value1, value2, value3, ..., valueN]

IN()これは、SQL の演算子と同様に、入力値のいずれかに一致する場合に要素を返します。

これはクエリに似ていrangeますが、要素は必ずしも範囲を記述しているわけではありません。

Lucene.Net API を使用した例は次のようになります。

var query = new QueryParser(version, "FieldName", analyzer).In("value1", "value2", "value3");

これは Lucene.Net で可能ですか?

4

2 に答える 2

4

field:value1 field:value2 ....トリックを行う必要があります。デフォルトでは、すべての用語はORed です。

プログラム的に、あなたは試すことができます、

public static Query In(string fieldName, IEnumerable<string> values)
{
    var query = new BooleanQuery();
    foreach (var val in values)
    {
        query.Add(new TermQuery(new Lucene.Net.Index.Term(fieldName, val)), BooleanClause.Occur.SHOULD);
    }
    return query;
}
于 2013-01-18T18:56:29.677 に答える
0

@I4V が述べたように、ORデフォルトでは Lucene の用語なので、これで目的の結果が得られるはずです。

public Query In(string propertyName, IEnumerable<string> collection)
{
    var query = new QueryParser(version, propertyName, analyzer).Parse(string.Join(" ", collection));

    return query;
}

に基づく、

field:value1, value2, value3, ..., valueN

コレクション内に少なくとも 1 つの値を持つ任意のドキュメントを返します。

于 2013-01-21T13:39:37.703 に答える