2011-01-26 11 views
1

LDAPスキーマに、「Food」という属性があり、それはユーザーの好きな食べ物を格納しているとします。これは複数の値を持つ属性なので、1人の人にはさまざまな値が表示されます。そのようなエントリの複数値の属性で*特定の値のみを持つエントリを検索できますか?

部分ダンプは次のようになります。

dn: cn=joe,ou=people,dc=company,dc=com 
cn: joe 
Food: pizza 
Food: beer 
Food: wings 

だから我々はジョーは本当にピザ、ビールや翼を好きなことがわかります。

次に、ジョーをピザ、ビール、または羽を楽しむ他のユーザーとマッチさせたいとしますが、ブリュッセルの芽やカリフラワーを楽しむユーザーではないとしましょう。

「ピザ」、「ビール」、「ウィング」のいずれか1つ以上を含む検索フィルタがありますか - と、それ以外は - 食品属性ですか?

最初の部分は、これらの3つの値のいずれかまたは全てを探して、簡単です:

(|(Food=pizza)(Food=beer)(Food=wings)) 

しかし、どのように私はこれらの3つ以外の任意の値を持つエントリを除外することを教えていますか?

明らかに、私は検索結果を後処理して、不正な値を持つエントリを手動で取り除くことができますが、避けることができれば、そうしないでください。

答えて

1

あなたはこのような何かを探しているかもしれない、知られており、限られている「三つのもの以外の任意の値」場合:

(&(|(Food=pizza)(Food=beer)(Food=wings))(|(!(Food=cauliflower))(!(Food=sprouts)))) 

は基本的に、あなたはそれはピザやビールだOR」と言う物フィルタを作りますまたはそれらの任意の組み合わせ、そしてそれはカリフラワーや芽吹きではありません。

「ピザ、ビール、羽、またはそれらの組み合わせ」と言っていいかどうかは分かりません。私が想像できる最良の方法は、すべての可能な値を持つ非常に冗長なフィルタを作成することです。他の誰かがもっと良い方法を知っているのだろうか?

+0

私は馬鹿げた例として芽とカリフラワーを使っていました。私は不適合値が事前にわかっていることを暗示するつもりはありませんでした。私は「ピザ」、「ビール」、「翼」以外の食べ物が含まれているものは除きたい。 –

+0

お役立ち情報その場合、私は実験的に下記のgeoffcのアプローチを推奨する必要があります。私はこれをテストする便利なLDAPを持っていませんが、彼のフィルタは動作するように見えます。 – hoosteeno

0

このフィルタの動作を否定しますか?

(&(!(Food=pizza))(!(Food=beer))(!(Food=wings))

ですから、(!(&(!(Food=pizza))(!(Food=beer))(!(Food=wings)))

を得ることを、私はそれは、効率的な任意の方法である疑い。それがうまくいくかどうかわからない...