使用Elasticsearch和Rails分析模型数据中的相似性

Dre*_*rew 5 postgresql ruby-on-rails data-analysis elasticsearch searchkick

我想使用Elasticsearch来分析数据并将其显示给用户.

当用户查看模型的记录时,我想在数据库中显示该模型的"相似"记录列表,以及相似性百分比.这将匹配模型上的每个字段.

我知道使用Searchkick gem我可以使用命令查找类似的记录:

product = Product.first
product.similar(fields: ["name"], where: {size: "12 oz"})
Run Code Online (Sandbox Code Playgroud)

我想更进一步,比较整个记录(最终的关联).

在Rails中使用Elasticsearch/Searchkick是可行的,还是应该使用其他方法来分析数据?

mic*_*mia 3

Elasticsearch 中有一个专门为此目的构建的功能,称为more_like_this. mlt查询的文档详细介绍了如何准确地实现您想要做的事情。

您向该字段提供的内容like将被分析,并且每个字段最相关的术语将用于检索包含尽可能多的相关术语的文档。如果您将所有记录都存储在 Elasticsearch 中,则可以使用Multi GET 语法将索引中已有的文档指定为字段内容,like如下所示:

    "like" : [
      {
        "_index" : "model",
        "_type" : "model",
        "_id" : "1"
      }
    ]
Run Code Online (Sandbox Code Playgroud)

请记住,使用此语法时不能使用索引别名(因此,如果您不确定文档当前驻留在哪个索引中,则必须首先进行文档查找)。

如果不指定fields字段,则将使用源文档中的所有字段。fields为了避免意外,我的建议是始终指定您希望匹配的类似文档的列表。

如果您有想要与源文档完美匹配的非文本字段,您可能需要考虑使用查询bool,以编程方式创建该filter部分,以将查询返回的文档限制mlt为整个索引的筛选子集。

您可以使用高级搜索功能在 Searchkick 中构建这些查询,手动指定搜索请求的正文。