セマンティッククエリ

この機能はベータ版であり、変更される可能性があります。デザインとコードは公式GA機能よりも成熟しておらず、保証なしでそのまま提供されています。ベータ機能は公式GA機能のサポートSLAの対象外です。

  1. ## リクエストの例
  2. #### Python
  3. ``````python
  4. resp = client.search(
  5. index="my-index-000001",
  6. query={
  7. "semantic": {
  8. "field": "inference_field",
  9. "query": "Best surfing places"
  10. }
  11. },
  12. )
  13. print(resp)
  14. `

Js

  1. const response = await client.search({
  2. index: "my-index-000001",
  3. query: {
  4. semantic: {
  5. field: "inference_field",
  6. query: "Best surfing places",
  7. },
  8. },
  9. });
  10. console.log(response);

コンソール

  1. GET my-index-000001/_search
  2. {
  3. "query": {
  4. "semantic": {
  5. "field": "inference_field",
  6. "query": "Best surfing places"
  7. }
  8. }
  9. }

セマンティック用のトップレベルパラメータ

  • field
  • (必須、文字列) クエリを実行するためのsemantic_textフィールド。
  • query
  • (必須、文字列) フィールドで検索するクエリテキスト。
  1. ## セマンティッククエリを使用したハイブリッド検索
  2. `````semantic`````クエリは、`````semantic`````クエリが語彙クエリと組み合わされるハイブリッド検索の一部として使用できます。たとえば、以下のクエリは、`````title`````フィールドが「山の湖」と一致するドキュメントを見つけ、`````title_semantic`````フィールド(`````semantic_text`````フィールド)に対するセマンティック検索の結果と組み合わせます。組み合わされたドキュメントはスコア付けされ、スコアが最も高い上位3つのドキュメントが返されます。
  3. #### Python
  4. ``````python
  5. resp = client.search(
  6. index="my-index",
  7. size=3,
  8. query={
  9. "bool": {
  10. "should": [
  11. {
  12. "match": {
  13. "title": {
  14. "query": "mountain lake",
  15. "boost": 1
  16. }
  17. }
  18. },
  19. {
  20. "semantic": {
  21. "field": "title_semantic",
  22. "query": "mountain lake",
  23. "boost": 2
  24. }
  25. }
  26. ]
  27. }
  28. },
  29. )
  30. print(resp)
  31. `

Js

  1. const response = await client.search({
  2. index: "my-index",
  3. size: 3,
  4. query: {
  5. bool: {
  6. should: [
  7. {
  8. match: {
  9. title: {
  10. query: "mountain lake",
  11. boost: 1,
  12. },
  13. },
  14. },
  15. {
  16. semantic: {
  17. field: "title_semantic",
  18. query: "mountain lake",
  19. boost: 2,
  20. },
  21. },
  22. ],
  23. },
  24. },
  25. });
  26. console.log(response);

コンソール

  1. POST my-index/_search
  2. {
  3. "size" : 3,
  4. "query": {
  5. "bool": {
  6. "should": [
  7. {
  8. "match": {
  9. "title": {
  10. "query": "mountain lake",
  11. "boost": 1
  12. }
  13. }
  14. },
  15. {
  16. "semantic": {
  17. "field": "title_semantic",
  18. "query": "mountain lake",
  19. "boost": 2
  20. }
  21. }
  22. ]
  23. }
  24. }
  25. }

セマンティックテキストを相互ランク融合の一部として使用して、関連する結果のランキングを簡単にすることもできます:

Python

  1. resp = client.search(
  2. index="my-index",
  3. retriever={
  4. "rrf": {
  5. "retrievers": [
  6. {
  7. "standard": {
  8. "query": {
  9. "term": {
  10. "text": "shoes"
  11. }
  12. }
  13. }
  14. },
  15. {
  16. "standard": {
  17. "query": {
  18. "semantic": {
  19. "field": "semantic_field",
  20. "query": "shoes"
  21. }
  22. }
  23. }
  24. }
  25. ],
  26. "rank_window_size": 50,
  27. "rank_constant": 20
  28. }
  29. },
  30. )
  31. print(resp)

Js

  1. const response = await client.search({
  2. index: "my-index",
  3. retriever: {
  4. rrf: {
  5. retrievers: [
  6. {
  7. standard: {
  8. query: {
  9. term: {
  10. text: "shoes",
  11. },
  12. },
  13. },
  14. },
  15. {
  16. standard: {
  17. query: {
  18. semantic: {
  19. field: "semantic_field",
  20. query: "shoes",
  21. },
  22. },
  23. },
  24. },
  25. ],
  26. rank_window_size: 50,
  27. rank_constant: 20,
  28. },
  29. },
  30. });
  31. console.log(response);

コンソール

  1. GET my-index/_search
  2. {
  3. "retriever": {
  4. "rrf": {
  5. "retrievers": [
  6. {
  7. "standard": {
  8. "query": {
  9. "term": {
  10. "text": "shoes"
  11. }
  12. }
  13. }
  14. },
  15. {
  16. "standard": {
  17. "query": {
  18. "semantic": {
  19. "field": "semantic_field",
  20. "query": "shoes"
  21. }
  22. }
  23. }
  24. }
  25. ],
  26. "rank_window_size": 50,
  27. "rank_constant": 20
  28. }
  29. }
  30. }

セマンティックテキストフィールドの高度な検索

  1. `````semantic_text`````フィールドで`````sparse_vector`````クエリまたは`````knn`````クエリを使用することは可能ですが、`````sparse_vector`````または`````dense_vector`````フィールドタイプで`````semantic_query`````を使用することはサポートされていません。
  2. ## スパースエンベディング推論を使用した検索
  3. 推論エンドポイントが`````sparse_embedding`````モデルを使用している場合、[`````sparse_vector`````クエリ](/read/elasticsearch-8-15/adc624faab69b84d.md)を[`````semantic_text`````](/read/elasticsearch-8-15/51a5d94c56d7eaa0.md)フィールドに対して次のように使用できます:
  4. #### Python
  5. ``````python
  6. resp = client.search(
  7. index="test-index",
  8. query={
  9. "nested": {
  10. "path": "inference_field.inference.chunks",
  11. "query": {
  12. "sparse_vector": {
  13. "field": "inference_field.inference.chunks.embeddings",
  14. "inference_id": "my-inference-id",
  15. "query": "mountain lake"
  16. }
  17. }
  18. }
  19. },
  20. )
  21. print(resp)
  22. `

Js

  1. const response = await client.search({
  2. index: "test-index",
  3. query: {
  4. nested: {
  5. path: "inference_field.inference.chunks",
  6. query: {
  7. sparse_vector: {
  8. field: "inference_field.inference.chunks.embeddings",
  9. inference_id: "my-inference-id",
  10. query: "mountain lake",
  11. },
  12. },
  13. },
  14. },
  15. });
  16. console.log(response);

コンソール

  1. GET test-index/_search
  2. {
  3. "query": {
  4. "nested": {
  5. "path": "inference_field.inference.chunks",
  6. "query": {
  7. "sparse_vector": {
  8. "field": "inference_field.inference.chunks.embeddings",
  9. "inference_id": "my-inference-id",
  10. "query": "mountain lake"
  11. }
  12. }
  13. }
  14. }
  15. }
  1. ## テキストエンベディング推論を使用した検索
  2. 推論エンドポイントが`````text_embedding`````モデルを使用している場合、[`````knn`````クエリ](/read/elasticsearch-8-15/7e8b3b9d8f84b693.md)を`````semantic_text`````フィールドに対して次のように使用できます:
  3. #### Python
  4. ``````python
  5. resp = client.search(
  6. index="test-index",
  7. query={
  8. "nested": {
  9. "path": "inference_field.inference.chunks",
  10. "query": {
  11. "knn": {
  12. "field": "inference_field.inference.chunks.embeddings",
  13. "query_vector_builder": {
  14. "text_embedding": {
  15. "model_id": "my_inference_id",
  16. "model_text": "mountain lake"
  17. }
  18. }
  19. }
  20. }
  21. }
  22. },
  23. )
  24. print(resp)
  25. `

Js

  1. const response = await client.search({
  2. index: "test-index",
  3. query: {
  4. nested: {
  5. path: "inference_field.inference.chunks",
  6. query: {
  7. knn: {
  8. field: "inference_field.inference.chunks.embeddings",
  9. query_vector_builder: {
  10. text_embedding: {
  11. model_id: "my_inference_id",
  12. model_text: "mountain lake",
  13. },
  14. },
  15. },
  16. },
  17. },
  18. },
  19. });
  20. console.log(response);

コンソール

  1. GET test-index/_search
  2. {
  3. "query": {
  4. "nested": {
  5. "path": "inference_field.inference.chunks",
  6. "query": {
  7. "knn": {
  8. "field": "inference_field.inference.chunks.embeddings",
  9. "query_vector_builder": {
  10. "text_embedding": {
  11. "model_id": "my_inference_id",
  12. "model_text": "mountain lake"
  13. }
  14. }
  15. }
  16. }
  17. }
  18. }
  19. }

knnクエリをカスタマイズして、num_candidateskなどの特定の設定を含めることができます。