セマンティッククエリ
この機能はベータ版であり、変更される可能性があります。デザインとコードは公式GA機能よりも成熟しておらず、保証なしでそのまま提供されています。ベータ機能は公式GA機能のサポートSLAの対象外です。
## リクエストの例
#### Python
``````python
resp = client.search(
index="my-index-000001",
query={
"semantic": {
"field": "inference_field",
"query": "Best surfing places"
}
},
)
print(resp)
`
Js
const response = await client.search({
index: "my-index-000001",
query: {
semantic: {
field: "inference_field",
query: "Best surfing places",
},
},
});
console.log(response);
コンソール
GET my-index-000001/_search
{
"query": {
"semantic": {
"field": "inference_field",
"query": "Best surfing places"
}
}
}
セマンティック用のトップレベルパラメータ
field
- (必須、文字列) クエリを実行するための
semantic_text
フィールド。 query
- (必須、文字列) フィールドで検索するクエリテキスト。
## セマンティッククエリを使用したハイブリッド検索
`````semantic`````クエリは、`````semantic`````クエリが語彙クエリと組み合わされるハイブリッド検索の一部として使用できます。たとえば、以下のクエリは、`````title`````フィールドが「山の湖」と一致するドキュメントを見つけ、`````title_semantic`````フィールド(`````semantic_text`````フィールド)に対するセマンティック検索の結果と組み合わせます。組み合わされたドキュメントはスコア付けされ、スコアが最も高い上位3つのドキュメントが返されます。
#### Python
``````python
resp = client.search(
index="my-index",
size=3,
query={
"bool": {
"should": [
{
"match": {
"title": {
"query": "mountain lake",
"boost": 1
}
}
},
{
"semantic": {
"field": "title_semantic",
"query": "mountain lake",
"boost": 2
}
}
]
}
},
)
print(resp)
`
Js
const response = await client.search({
index: "my-index",
size: 3,
query: {
bool: {
should: [
{
match: {
title: {
query: "mountain lake",
boost: 1,
},
},
},
{
semantic: {
field: "title_semantic",
query: "mountain lake",
boost: 2,
},
},
],
},
},
});
console.log(response);
コンソール
POST my-index/_search
{
"size" : 3,
"query": {
"bool": {
"should": [
{
"match": {
"title": {
"query": "mountain lake",
"boost": 1
}
}
},
{
"semantic": {
"field": "title_semantic",
"query": "mountain lake",
"boost": 2
}
}
]
}
}
}
セマンティックテキストを相互ランク融合の一部として使用して、関連する結果のランキングを簡単にすることもできます:
Python
resp = client.search(
index="my-index",
retriever={
"rrf": {
"retrievers": [
{
"standard": {
"query": {
"term": {
"text": "shoes"
}
}
}
},
{
"standard": {
"query": {
"semantic": {
"field": "semantic_field",
"query": "shoes"
}
}
}
}
],
"rank_window_size": 50,
"rank_constant": 20
}
},
)
print(resp)
Js
const response = await client.search({
index: "my-index",
retriever: {
rrf: {
retrievers: [
{
standard: {
query: {
term: {
text: "shoes",
},
},
},
},
{
standard: {
query: {
semantic: {
field: "semantic_field",
query: "shoes",
},
},
},
},
],
rank_window_size: 50,
rank_constant: 20,
},
},
});
console.log(response);
コンソール
GET my-index/_search
{
"retriever": {
"rrf": {
"retrievers": [
{
"standard": {
"query": {
"term": {
"text": "shoes"
}
}
}
},
{
"standard": {
"query": {
"semantic": {
"field": "semantic_field",
"query": "shoes"
}
}
}
}
],
"rank_window_size": 50,
"rank_constant": 20
}
}
}
セマンティックテキストフィールドの高度な検索
`````semantic_text`````フィールドで`````sparse_vector`````クエリまたは`````knn`````クエリを使用することは可能ですが、`````sparse_vector`````または`````dense_vector`````フィールドタイプで`````semantic_query`````を使用することはサポートされていません。
## スパースエンベディング推論を使用した検索
推論エンドポイントが`````sparse_embedding`````モデルを使用している場合、[`````sparse_vector`````クエリ](/read/elasticsearch-8-15/adc624faab69b84d.md)を[`````semantic_text`````](/read/elasticsearch-8-15/51a5d94c56d7eaa0.md)フィールドに対して次のように使用できます:
#### Python
``````python
resp = client.search(
index="test-index",
query={
"nested": {
"path": "inference_field.inference.chunks",
"query": {
"sparse_vector": {
"field": "inference_field.inference.chunks.embeddings",
"inference_id": "my-inference-id",
"query": "mountain lake"
}
}
}
},
)
print(resp)
`
Js
const response = await client.search({
index: "test-index",
query: {
nested: {
path: "inference_field.inference.chunks",
query: {
sparse_vector: {
field: "inference_field.inference.chunks.embeddings",
inference_id: "my-inference-id",
query: "mountain lake",
},
},
},
},
});
console.log(response);
コンソール
GET test-index/_search
{
"query": {
"nested": {
"path": "inference_field.inference.chunks",
"query": {
"sparse_vector": {
"field": "inference_field.inference.chunks.embeddings",
"inference_id": "my-inference-id",
"query": "mountain lake"
}
}
}
}
}
## テキストエンベディング推論を使用した検索
推論エンドポイントが`````text_embedding`````モデルを使用している場合、[`````knn`````クエリ](/read/elasticsearch-8-15/7e8b3b9d8f84b693.md)を`````semantic_text`````フィールドに対して次のように使用できます:
#### Python
``````python
resp = client.search(
index="test-index",
query={
"nested": {
"path": "inference_field.inference.chunks",
"query": {
"knn": {
"field": "inference_field.inference.chunks.embeddings",
"query_vector_builder": {
"text_embedding": {
"model_id": "my_inference_id",
"model_text": "mountain lake"
}
}
}
}
}
},
)
print(resp)
`
Js
const response = await client.search({
index: "test-index",
query: {
nested: {
path: "inference_field.inference.chunks",
query: {
knn: {
field: "inference_field.inference.chunks.embeddings",
query_vector_builder: {
text_embedding: {
model_id: "my_inference_id",
model_text: "mountain lake",
},
},
},
},
},
},
});
console.log(response);
コンソール
GET test-index/_search
{
"query": {
"nested": {
"path": "inference_field.inference.chunks",
"query": {
"knn": {
"field": "inference_field.inference.chunks.embeddings",
"query_vector_builder": {
"text_embedding": {
"model_id": "my_inference_id",
"model_text": "mountain lake"
}
}
}
}
}
}
}
knn
クエリをカスタマイズして、num_candidates
やk
などの特定の設定を含めることができます。