gpt4 book ai didi

elasticsearch - 带有Elatic搜索渗透的复杂查询

转载 作者:行者123 更新时间:2023-12-03 01:29:10 27 4
gpt4 key购买 nike

我有一个PostgreSQL数据库,其中包含从网上解析的新闻报道。解析器每小时运行一次,收集新的新闻项并将其存储在DB中。该应用程序的用户可以将某些关键字添加到他们的个人资料中,这样,如果发现包含该关键字的新新闻项,则将通知他们。当前,我正在为此使用SQL查询,因此,每当我收到新的新闻文章时,我都会尝试将其与用户添加的所有关键字进行匹配,然后发出通知,但这会花费很多时间。所以我在考虑整合Elasticsearch。我遇到过percolation query,但是我找不到关于它的很好的文档,所以不确定我是否能够使用它创建复杂的查询。搜索需要考虑以下因素:

  • 用户可以使用AND,OR,NOT添加关键字,我们需要分别“搜索全部”,“任何一个”,“不包含”。例如,用户可以给诸如“Bitcoin”和“Cryptocurrency”之类的关键词而不是“Mining”,那么在这种情况下,此搜索查询应仅匹配包含单词“Bitcoin”和“Cryptocurrency”的新闻文章,而不应包含单词“Mining”。
    关键字可以在文章标题或文章正文
  • 中的任何位置
  • 提取。因此,如果用户关键字包含“raining”,而文章包含单词“rain”,则渗滤搜索仍应返回该关键字的ID
  • 用户还可以提供作者作为关键字,在这种情况下,我们需要返回由该作者创作的文章
  • 最佳答案

    感谢您的精确度。

    要在您的情况下使用percolate查询,您必须:

  • 创建一个索引,该索引定义文章的映射,有关用户的信息以及与用户首选项相对应的过滤器查询。
  • PUT /percolated_queries_index
    {
    "mappings": {
    "properties": {
    "article": {
    // Mapping for your article
    },
    "query": {
    "type": "percolator"
    },
    "user": {
    // Mapping for the information related to the user
    }
    }
    }
    }
    article字段为必填字段,因为您要渗透的文章文档将使用此映射。这可能与您在 article索引中使用的映射相同。如文档中所述,您应该将此映射视为对要匹配的文档的预处理。例如,您将必须在此处指定词干分析器。
  • percolator字段中为每个用户索引与其用户首选项相对应的搜索查询。
  • PUT /percolated_queries_index/_doc
    {
    "query" : {
    // The elasticsearch query corresponding to the user preferences
    },
    "user": {
    // Information for the user, e.g., id, email
    }
    }

    该查询对应于重写为Elasticsearch查询的用户首选项。例如,对文章作者的匹配查询和对AND,OR,NOT关键字的 bool(boolean) 查询。这可能是困难的部分,因为您将不得不编写将用户查询转换为Elasticsearch查询的内容。如果可以使用 query string语法,应该会更容易。

    您不应在此处设置 article字段。
  • 为新文章建立索引时,请在percolate firled参数中使用此文章运行document搜索查询。如果文章已被索引,您还可以直接使用其ID(语法在文档中给出)。
  • GET /percolated_queries_index/_search
    {
    "query" : {
    "percolate" : {
    "field" : "query",
    "document" : {
    // The content of the article
    }
    }
    }
    "_source": "user"
    }

    对此查询的响应将返回包含搜索查询的文档,该搜索查询与包含与该文章相对应的用户信息的文章文档匹配。由于您通常对搜索查询本身不感兴趣,因此可以进行筛选以仅获取 user字段。

    此查询的响应将为您提供应将新文章发送给的所有用户。

    关于elasticsearch - 带有Elatic搜索渗透的复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56853736/

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