スパンフィールドマスキングクエリ

スパンクエリがコンポジット単一フィールドスパンクエリに参加できるようにするためのラッパーで、検索フィールドについて嘘をつくことができます。

これにより、通常は許可されていない異なるフィールドにわたるspan-nearspan-orのようなクエリをサポートできます。

スパンフィールドマスキングクエリは、同じコンテンツが複数のアナライザーでインデックスされる場合に、マルチフィールドと組み合わせて非常に貴重です。たとえば、テキストを単語に分割する標準アナライザーでフィールドをインデックスし、さらに単語をそのルート形式にステムする英語アナライザーで再度インデックスすることができます。

例:

Python

  1. resp = client.search(
  2. query={
  3. "span_near": {
  4. "clauses": [
  5. {
  6. "span_term": {
  7. "text": "quick brown"
  8. }
  9. },
  10. {
  11. "span_field_masking": {
  12. "query": {
  13. "span_term": {
  14. "text.stems": "fox"
  15. }
  16. },
  17. "field": "text"
  18. }
  19. }
  20. ],
  21. "slop": 5,
  22. "in_order": False
  23. }
  24. },
  25. highlight={
  26. "require_field_match": False,
  27. "fields": {
  28. "*": {}
  29. }
  30. },
  31. )
  32. print(resp)

Ruby

  1. response = client.search(
  2. body: {
  3. query: {
  4. span_near: {
  5. clauses: [
  6. {
  7. span_term: {
  8. text: 'quick brown'
  9. }
  10. },
  11. {
  12. span_field_masking: {
  13. query: {
  14. span_term: {
  15. 'text.stems' => 'fox'
  16. }
  17. },
  18. field: 'text'
  19. }
  20. }
  21. ],
  22. slop: 5,
  23. in_order: false
  24. }
  25. },
  26. highlight: {
  27. require_field_match: false,
  28. fields: {
  29. "*": {}
  30. }
  31. }
  32. }
  33. )
  34. puts response

Js

  1. const response = await client.search({
  2. query: {
  3. span_near: {
  4. clauses: [
  5. {
  6. span_term: {
  7. text: "quick brown",
  8. },
  9. },
  10. {
  11. span_field_masking: {
  12. query: {
  13. span_term: {
  14. "text.stems": "fox",
  15. },
  16. },
  17. field: "text",
  18. },
  19. },
  20. ],
  21. slop: 5,
  22. in_order: false,
  23. },
  24. },
  25. highlight: {
  26. require_field_match: false,
  27. fields: {
  28. "*": {},
  29. },
  30. },
  31. });
  32. console.log(response);

コンソール

  1. GET /_search
  2. {
  3. "query": {
  4. "span_near": {
  5. "clauses": [
  6. {
  7. "span_term": {
  8. "text": "quick brown"
  9. }
  10. },
  11. {
  12. "span_field_masking": {
  13. "query": {
  14. "span_term": {
  15. "text.stems": "fox"
  16. }
  17. },
  18. "field": "text"
  19. }
  20. }
  21. ],
  22. "slop": 5,
  23. "in_order": false
  24. }
  25. },
  26. "highlight": {
  27. "require_field_match" : false,
  28. "fields": {
  29. "*": {}
  30. }
  31. }
  32. }
検索を行う元のフィールド
元のフィールドでマスキングしているマスクされたフィールド
マスクされたフィールドをハイライトするには、”require_field_match” : falseを使用します

注意: span_field_maskingクエリは予期しないスコアリングとハイライトの動作を持つ可能性があります。これは、クエリがマスクされたフィールドを返しハイライトしますが、スコアリングとハイライトは元のフィールドの用語統計とオフセットを使用して行われるためです。

注意: ハイライトが機能するためには、パラメータ: require_field_matchをハイライターでfalseに設定する必要があります。