gpt4 book ai didi

ruby-on-rails - 如何使模型上的字段不可搜索,但仍应在_source中使用?

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

我在Rails中将轮胎 gem 用于ElasticSearch。

好吧,我整天都在为此而战,这就是我所取得的成就。我想使模型上的字段不可搜索,但它们仍应在_source中可用,因此我可以使用它们对搜索结果进行排序。

我的映射:

mapping do
indexes :created_at, :type => 'date', :index => :not_analyzed
indexes :vote_score, :type => 'integer', :index => :not_analyzed
indexes :title
indexes :description
indexes :tags
indexes :answers do
indexes :description
end
end

我的to_indexed_json方法:
def to_indexed_json
{
vote_score: vote_score,
created_at: created_at,
title: title,
description: description,
tags: tags,
answers: answers.map{|answer| answer.description}
}.to_json
end

我的搜索查询:
def self.search(term='', order_by, page: 1)
tire.search(page: page, per_page: PAGE_SIZE, load: true) do
query { term.present? ? string(term) : all }
sort {
by case order_by
when LAST_POSTED then {created_at: 'desc'}
else {vote_score: 'desc', created_at: 'desc'}
end
}
end
end

我现在要解决的唯一问题是如何使 投票_得分 created_at 字段不可搜索,但在搜索时仍设法使用它们进行排序。

我尝试了 indexes :created_at, :type => 'date', :index => :no,但是没有用。

最佳答案

据我了解,您将搜索查询发送到elasticsearch时未指定字段。这意味着它将再次执行_all字段。这是一个“特殊”字段,可以使 Elasticsearch 更容易快速使用。默认情况下,所有字段都被索引两次,一次在自己的字段中,一次在_all字段中。 (您甚至可以将不同的映射/分析器应用于这两个索引。)

我认为将字段的映射设置为"include_in_all": "false"应该适合您(删除"index": "no"部分)。现在,该字段将在其字段名称下被标记化(您可以使用它进行搜索),但是在_all字段中进行搜索时,它不会影响结果(因为_all字段中都没有存储任何标记)。

Have a read of the es docs on mappings, scroll down to the parameters for each type

祝好运!

关于ruby-on-rails - 如何使模型上的字段不可搜索,但仍应在_source中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17901393/

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