我目前正在使用該elasticsearch_dsl庫在 python 中探索 elasticsearch。我知道我的 Elasticsearch 知識目前是有限的。
我創建了一個這樣的模型:
class Post(InnerDoc):
text = Text()
id = Integer()
class User(Document):
name = Text()
posts = Object(doc_class=Posts)
signed_up_at = Date()
帖子的資料是這樣的陣列:
[
{
"text": "Test",
"id": 2
},
]
存盤我的帖子有效。然而,在我看來,這似乎是錯誤的。我將“帖子”屬性指定為帖子 - 而不是帖子串列。
查詢作品,我可以:
s = Search(using=client).query("match", posts__text="test")
并將檢索具有包含單詞的帖子的用戶作為結果。我想要的是讓用戶 所有符合條件的用戶出現在結果中的帖子(意思是所有包含搜索短語的帖子)。我稱它為內在打擊,但我不確定這是否正確。
幫助將不勝感激!
我嘗試對查詢使用“嵌套”而不是“匹配”,但這不起作用:
[nested] query does not support [posts]
我懷疑這與我的索引指定不正確有關。
uj5u.com熱心網友回復:
我將我的模型更新為:
class Post(InnerDoc):
text = Text(analyzer="snowball")
id = Integer()
class User(Document):
name = Text()
posts = Nested(doc_class=Posts)
signed_up_at = Date()
這允許我執行以下查詢:
GET users/_search
{
"query": {
"nested": {
"path": "posts",
"query": {
"match": {
"posts.text": "idea"
}
},
"inner_hits": {}
}
}
}
這轉換為 python 中的以下 elasticsearch-dsl 查詢:
s = (
Search(using=client).query(
"nested",
path="posts",
query=Q("term", **{"post.text": "Idea"})
)
由于 elasticsearch 如何在內部表示物件( https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html),可能需要使用嵌套。由于物件串列可能會被展平,因此它可能不允許檢索包含帖子的正確文本和 id 關聯的完整內部點擊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/530378.html
標籤:Python弹性搜索弹性搜索-dsl弹性搜索-dsl-py
