問題タブ [elastica]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - Elasticsearch の「ユニオン」を使用したサブクエリ
私は現在、Elasticsearch を広告 Web サイトの検索エンジンとして使用することを選択したプロジェクトに取り組んでいます。
現在、次のビジネスルールがあります。
1 ページあたり 25 の広告を表示します。この 25 個の広告のうち、表示される広告のうち 10 個は「有料広告」であり、残りの 15 個は「無料」である必要があります。25 個すべてが実行された検索に関連している必要があります (つまり、キーワード、地域、価格、カテゴリなど)。
2 つの別々のクエリを使用してこれを実行できることはわかっていますが、これはリソースの膨大な浪費のようです。「サブクエリ」を実行して(それを呼び出すことができる場合)、これらの結果を単一の結果セットに結合することは可能ですか? 1 つのクエリで、elasticsearch から 10 個の「有料」広告と 15 個の「無料」広告のみを取得する方法はありますか? もちろん、この要件を可能にするのに十分な広告があると仮定します。
助けてくれてありがとう!
編集- より明確にするためにマッピング情報を追加するだけです。
私が望むのは、これをクエリして、「advertType」が「有料」である 10 個の結果と、「advertType」が「無料」である 15 個の結果を取得できるようにすることです...
symfony - コンソール コマンドでイベント サブスクライバーが呼び出されない
データベースを更新するには、cron でコマンドを実行する必要があります。ただし、これにより、私が持っているエラスティカ インデックスに問題が生じるようです。おそらく、イベント サブスクライバーがコマンドによって呼び出されていないためです。
私のサービスは次のようになります
イベント サブスクライバーが呼び出されていることを確認する方法はありますか?
search - クエリ文字列による特定のフィールドでスペースを使用した検索が機能しない
次のマッピングで既にインデックスを作成したTwitterユーザーの説明フィールドで「フォローバック」を検索します。
注: マッピングの一部のみを強調表示します。
1.
2.
3.
4.
setFields がコメントされている間に検索すると、次のような多くの結果が得られます
あなたがフォローするなら、フォローバックしてください!:) 100%フォローバック!:)
私に従ってください私はフォローバックします:) instagram:juliemar25私はフォローバックします
しかし、setFieldsとdefaultOperatorをANDにコメント解除した後、結果は表示されません。AND setFieldsとdefaultOperatorをORにコメント解除すると、説明に「フォロー」が含まれている結果のみが表示されます。
Q1: _all ではなく setFields で空白が機能しないのはなぜですか?
マッチクエリの使用中
また、説明のみに「フォローバック」が含まれている 2 つの結果のみを示しています。しかし、一致フィールドを_allに変更した後、説明フィールドに「フォローバック」を含む多くの結果が表示されます
Q2. なぜそれが起こっているのですか?スペースで区切られた単語を検索するにはどうすればよいですか?
symfony - ESサーバーなしでFOSElasticaBundleを使用してSymfonyアプリケーションを単体テストしますか?
SQLite を DB として使用している単体テストの既存のセットを含むアプリケーションがあります。私は最近、ES を介して検索機能を追加しました。これは、DB を直接クエリするために使用されていたエンドポイント アクションの多くを置き換えました。ES 自体をテストせずに、これらのエンドポイントに関連するすべてのビジネス ロジックをテストしたいので、ES サーバーを使用できません。実行頻度を減らすために、一連の統合テストで ES 自体をテストする予定です。
私の問題は、実行フローで何が起こっているかを正確に追跡しようとすることです。
私の最初の傾向は、インデックス用に FOSElasticaBundle が作成する ES Finder のモック オブジェクトを単純に作成することでした。ページネーションを使用しているため、思ったよりも複雑であることがわかりました。
これは実際には、コントローラーからビューを返すまでずっと機能します。私のサービスは、ファイルに保存した (その後 ResultSet オブジェクトに渡した) JSON 検索応答から事前に入力された結果セットを含むモック paginatior アダプターを返します。ただし、ビューを返すと、既に渡した ResultSet を使用する代わりに、クエリを使用して ES を再度クエリしようとするリスナーが関係しているようです。
このリスナーが見つからないようです。また、 ResuletSet が既に存在するときにクエリを実行しようとする理由もわかりません。
私は FOSRestBundle も使用しており、それらの ViewListener を使用して、返されたものを自動シリアル化しています。その流れにも容疑者は見えません。結果セットのシリアル化と関係があるのではないかと思いますが、これまでのところ、問題のあるコードを追跡できていません。
以前にこれと同様のことを試みた人はいますか?現在のセットアップをデバッグする方法、またはこのタイプのテストで ES をモックするための代替のより良いセットアップのいずれかについて提案がありますか?
search - スクリプト スコア関数が機能していませんが、addDecayFunction は FunctionScore クエリで機能しています
私は Elastica を使用しており、\Elastica\Query\FunctionScore(); を使用します。関数スコア --> script_score。ここで addDecayFunction() は正常に機能しますが、 addScriptScoreFunction() は機能せず、例外もありません。
DecyFunction は動作しているためコメントされています
ここにコードがあります