現在、RichTextFieldsまたはStreamFields内のRichTextBlocksにインデックスを付ける場合、HTMLタグを含む生のコンテンツがインデックスに渡されます。 HTMLタグの名前/属性は意味のある検索可能なコンテンツ*ではないため、Djangoのstriptags
フィルターを適用するget_searchable_content
メソッドをこれらに提供することをお勧めします。
さらに重要なことに、 Elasticsearchのハイライトサポート(#5340を参照)を利用するようにElasticsearchバックエンドをカスタマイズする(または生のElasticsearchクエリを実行する)と、合格したかどうかに応じて、結果に誤ったHTMLタグまたは誤ったフォーマットが表示されます。クエリの'encoder': 'html'
。
(*これは完全に真実ではありません-たとえば、画像の代替テキストにインデックスを付けるための良いケースを作ることができます-したがって、理想的な解決策は、プレーンテキスト表現を生成するためにリッチテキスト機能レベルでカスタムルールを指定できることを含むでしょう。 。ただし、バランスをとると、タグを削除する方が、タグを保持するよりも優れていると思います。)
https://www.rca.ac.uk/で「h2」を検索し<h2>
要素を含むが、テキスト「h2」を含まない多くのページが含まれていることに注意してください。
この問題を解決するPRに取り組んでも大丈夫ですか? 私はずっと前に私のプロジェクトで上記と同じ可能な解決策をすでに実装しました。
@ acarasimon96もちろん、そうしてください!
#6099で解決