Endecaクエリを作成して、特定の文字で始まる必要のあるフィールドを取得することはできますか?最初の文字がすべてのユーザーを取得するように言いA
ますか?範囲フィルターで確認しましたが、ワイルドカード検索だけでなく数値フィールドのみをサポートしています。しかし、これまでのところうまく機能したものはありません。
3 に答える
Paul Lemkeが述べたように、ディメンションの作成は問題に取り組む1つの方法です。パフォーマンスのオーバーヘッドと無関係なレコードがあるため、ワイルドカードはオプションではありません。しかし、他のいくつかの選択肢を使用してそれを解決しました。
- 「StartWith」というオブジェクトの新しいプロパティを作成し、オブジェクトの最初の文字を保存して検索可能にします。ディメンションを作成するよりも簡単であることがわかりました。
Endecaでは通常「A」のような文字がストップワードであるという問題があります。これを解決するために、いくつかの回避策を実行できます。
- 最初の文字のASCII値を取得し、その数値をそのプロパティに格納します。このアプローチのもう1つの利点は、範囲フィルターを使用できることです。ただし、「AB」の種類の要件を検索することはできません。
- ^^^私の名前のようないくつかの文字を前に付けて、^^^Mを検索します。このアプローチの利点は、文字がABで始まるような条件を検索できることです。
現在のバージョン(6.1)のEndecaには、他のプログラミング言語の「startswith」関数のように機能する検索フィルターがありません。
私はおそらくあなたを近づけるかもしれない2つのオプションがあります:
本当に最初の文字だけを探している場合は、アルファベットの各文字(A、B、C ...)のディメンション値を設定できます。次に、各文字を絞り込んで、文字A、B、Cなどで始まる値のみを表示できます。これの唯一の欠点は、設定したディメンション値の数に基づいてのみフィルタリングできることです。したがって、「A」を追加した場合、「AB」で始まるものはフィルタリングできません。行を下げて「AB」、「BA」、「CA」などを追加することもできますが、それは非常に速く扱いにくくなります。
「startswith」関数に近いものが必要な場合、他の唯一のオプションはワイルドカード検索を使用することです。基本的に、次のようなプロパティ検索を実行します。
N=0&Ntk=Username&Ntt=ab*
ワイルドカード検索の秘訣は、そのプロパティ内の複数の単語にわたってそれを実行することです。したがって、これらの値のデータセットがあると仮定します。
- スミザーズスミス
- ラリー・スミス
- ジェナ・スミス
sm*
「sm」が姓に含まれているため、を検索すると、実際には3つの結果すべてが返されます。ダッシュのあるものでさえ、エンデカが別の言葉だと思っているように戻ってきます。(ただし、オフにすることは可能かもしれませんが、確かではありません)。つまり、基本的には次のようになります。プロパティに1つの単語を貼り付け、ワイルドカード検索を許可するようにそのプロパティを設定してから、そのプロパティに対して「何とか*」を実行すると、探している結果が得られるはずです。
フィールドの先頭への近さに基づいてランク付けされることになっている最初の関連性ランクモジュールを試しましたか?
それはあなたが探しているものに似ているように聞こえ、ワイルドカードと一緒にあなたの意図した結果を生み出すかもしれません。