2017-08-10 10 views
0

私は、私のサイトの検索エンジンをSQLベースからAlgoliaベースに変更しています。私はドキュメンテーションをたくさん見てきましたが、私はこれがどのように設定されるべきか正確に理解していません。Algoliaファセット、タグ、フィルタリング

各行には100以上の列があり、Algoliaの各項目ごとに100以上のパラメータに変換されます。それらの少なくとも半分が一方向または他の方法でフィルタリングに使用されます。レコードは次のようになります。

{ 
    "id":"1", 
    "Manufacturer": "Abcd", 
    "Brand": "Efgh", 
    "Description": "This is a description", 
    "approved": "1", 
    "status": "2", 
    ... 
} 

メーカー、ブランド、説明など、ユーザーが検索できる複数のフィールドがあります。これらのフィールドは、たとえばbrand = 'Abcd'のようなフィルタリングする必要があります。これは、ファセットを使用すべきときの完全な例であると私は理解しています。

しかし、ID、承認、ステータスなどはどうですか?これらは検索する必要のあるフィールドではありません。私にとっては、それらはファセットの用途のようには見えません。しかし、それは私がフィルタリングに使うことができる唯一の方法の一つのようです。私はちょうど50以上のファセットを持っていると思いますか?

また、それらは_tagsである必要がありますか?もしそうなら...どうすればタグに何かを追加できますか?私はDashboardでこれを行う方法が見つからず、PHPのマニュアルでも何も見つかりません。

数字の属性なので、これらの3つを検索することはできません。ドキュメントでは、数値でない限り、フィールドをフィルタ可能にする必要があります。しかし、次の検索は空になります。

$res = $index->search('', ['filters' => 'id = 1', 'hitsPerPage' => 15, ]); 

答えて

0

ジュリアン氏の回答によると、正しく行うべきことは、すべてをファセットとして設定することでした。のみ行っているすべての属性は、フィルタリングに使用すると、ファセットのためにのみフィルタリングするために設定する必要がありません。

$index->setSettings([ 
    'attributesForFaceting' => [ 
    'filterOnly(approved)' 
    ] 
]); 

データが正しくAlgoliaにプッシュされていなかったので、私の数値フィルタは何も返さないし、理由があります。すべての数値は文字列として送信されました。だから、元の記事に私の例を使用して、というよりも、このように見える:

{ 
    ... 
    "id": 1, 
    ... 
} 

それはこのように見えた: `approved`または` status`などの

{ 
    ... 
    "id": "1", 
    ... 
} 
0

私は承認やステータスなどの属性についての問題を理解していませんか?フィルタとして使用したいのですか、それとも不要にしますか?フィルタとファセットは同じです。

最新の例については、各ファセットフィルタを「attributesForFacets」としてダッシュボードに設定する必要があります。

あなたのIDが一意の場合は、objectIDにマップしてアクセスするほうが簡単です。 IDはおそらくファセットではありません。

多くの面が必要な場合は、多くの面を持つことができます。しかし、タグは数字ではなく単語でなければならないと思う。

+0

属性は、いくつかのフィルタリングのために必要とされます。明示的な目的のためにそれらをファセットにするのは間違っているようです。それが唯一の方法ですか? [Algolia docs](https://www.algolia.com/doc/guides/searching/faceting/)には、数値属性のフィルタリングはファセットではないが最後の例は見えないと書かれているそのように働くこと。私は '_tags'は単語でなければならないことに同意します。しかし、どうすればタグを追加できますか?私は方法を見つけることができません。 –

+0

ファセットを作るのはまったく正しいです。フィルタとファセットはほとんど同じです。タグを追加するには、配列 '_tags'に配列を渡すだけです –

関連する問題