gpt4 book ai didi

indexing - 我应该如何在Elasticsearch中索引此架构

转载 作者:行者123 更新时间:2023-12-03 02:07:18 25 4
gpt4 key购买 nike

我对如何在Elasticsearch中为这些文档建立索引感到迷茫。

文件1

{
text: ['chicken']
}

文件2
{
text: ['chicken'], [['broth', 'stock']]
}

我需要能够使用“鸡肉调味的汤料”或“鸡肉调味的肉汤”查询这些文件,并且它应该返回具有相同分数的两个文档,因为它们的所有术语都已在输入查询中匹配。它也不应仅以“鸡肉”作为查询返回doc 2。

基本上,我想知道在查询中某个位置找到了“文本”字段中的所有术语,并且内部数组(即:“汤”和“股票”的行为类似于OR子句)。

这有可能吗?

更新:

我确实找到了一种(麻烦的)方法。我通过将它们的字段组合成短语来保存文档(例如:文档2的['chicken broth','chicken stock'])。然后,我使用输入的每个组合作为短语进行搜索(例如:[“鸡肉”,“鸡肉调味的”,“鸡肉调味的肉汤”,“鸡肉肉的汤……”)。

这个解决方案确实给了我想要的结果,但是我不禁感到这是一个可以更优雅地处理的常见情况。感觉到ngram一直在向我的答案迈进,但是我无法完全解决。

最佳答案

因此,您可以尝试以下方法。过滤器可以解决您的问题,但是您将不得不更改索引文档的方式。

因此,与其像现在那样对doc1编制索引,不如对它编制索引:

PUT /test-index/.percolator/1
{
"query": {
"term": {
"text": {
"value": "chicken"
}
}
}
}

并且,像这样对doc2进行索引:
PUT /test-index/.percolator/2
{
"query": {
"bool": {
"must": [
{
"term": {
"text": {
"value": "chicken"
}
}
},
{
"bool": {
"should": [
{
"term": {
"text": {
"value": "broth"
}
}
},
{
"term": {
"text": {
"value": "stock"
}
}
}
]
}
}
]
}
}
}

否,而不是查询您之前查询文档的方式,对它们进行过滤:
GET /test-index/all_terms_search/_percolate
{
"doc": {
"text": "chicken flavored stock"
}
}

这将获取您的两个文件。这也使您可以灵活地控制要匹配的内容和数量。在渗透过滤器中为文档的反向查询建立索引时,您可以为该查询提供一个ID并与该ID对应,您可以以一种更为简单的形式维护文本,以供您在Elasticsearch的单独索引中使用,也可以使用其他可以真正快速获取匹配文档的数据存储区。

关于indexing - 我应该如何在Elasticsearch中索引此架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24587777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com