elasticsearch,Ruby On Rails,elasticsearch" /> elasticsearch,Ruby On Rails,elasticsearch" />

Ruby on rails ElasticSearch有许多rails关系模型

Ruby on rails ElasticSearch有许多rails关系模型,ruby-on-rails,elasticsearch,Ruby On Rails,elasticsearch,我使用ElasticSearch服务器搜索所有类型的图书ISBN、书名和图书主题标题。我用三个模型做了索引,它们的关系如下 书籍散列\u许多附加\u ISBN、主题 Book hash_一个别名 我的索引看起来像 { "_index":"books","_type":"book","_id":"9781135028411","_score":0.6377245, "_source":{"book_vbid": "9781135028411","book_title": "Objectiv

我使用ElasticSearch服务器搜索所有类型的图书ISBN、书名和图书主题标题。我用三个模型做了索引,它们的关系如下

书籍散列\u许多附加\u ISBN、主题

Book hash_一个别名

我的索引看起来像

{
"_index":"books","_type":"book","_id":"9781135028411","_score":0.6377245,
    "_source":{"book_vbid": "9781135028411","book_title": "Objectivity, Science and Society","book_author":"Paul A Komesaroff",
               "additional_isbn": [{"isbn_value": "0415474876"},{"isbn_value": "9780415474870"}],
               "aliase": {"eisbn_canonical":"9781135028411","isbn_canonical":"9781135028411","print_isbn_canonical":"9780415474870","isbn13":"9781135028411","isbn10":"1135028419"},
               "subjects": [{"title": "General"},{"title": "General"},{"title": "General"},{"title": "Physical & Earth Sciences -> Science -> General"},{"title": "Social Sciences -> Philosophy -> General"},{"title": "Social Sciences -> Social Sciences -> General"}]}},{
"_index":"books","_type":"book","_id":"9781135027896","_score":0.6348529,
    "_source":{"book_vbid": "9781135027896","book_title": "Beyond Empiricism","book_author":"Andrew Tudor",
                "additional_isbn": [{"isbn_value": "0415475007"},{"isbn_value": "9780415475006"}],
                "aliase": {"eisbn_canonical":"9781135027896","isbn_canonical":"9781135027896","print_isbn_canonical":"9780415475006","isbn13":"9781135027896","isbn10":"1135027897"},
                "subjects": [{"title": "General"},{"title": "General"},{"title": "General"},{"title": "Physical & Earth Sciences -> Science -> General"},{"title": "Social Sciences -> Philosophy -> General"},{"title": "Social Sciences -> Social Sciences -> General"}]}},{
"_index":"books","_type":"book","_id":"9781134429059","_score":0.6258716,
    "_source":{"book_vbid": "9781134429059","book_title": "Your Murderer","book_author":"Vassily Aksyonov",
                "additional_isbn": [{"isbn_value": "9057551039"},{"isbn_value": "9789057551031"}],
                "aliase": {"eisbn_canonical":"9781134429059","isbn_canonical":"9781134429059","print_isbn_canonical":"9789057551031","isbn13":"9781134429059","isbn10":"1134429053"},
                "subjects": [{"title": "General"},{"title": "General"},{"title": "Humanities -> Performing Arts -> General"},{"title": "Humanities -> TheatrGeneral"}]}}
我有这样的搜索方法

def self.search(query, options = {})
es_options =
  {
    query: {
      query_string: {
        query:            query,
        default_operator: 'AND',
    }
  },
  sort:  '_score',
}.merge!(options)
__elasticsearch__.search(es_options) end
我的要求就像我在
图书上搜索一样。搜索('general')
,搜索必须仅针对所有图书的主题值。
如何只在主题上搜索而不在其他列上搜索?

下面是一个示例,说明如何在两个特定列中搜索对象,以便更好地了解如何添加查询。第二个查询是如何在弹性搜索中执行精确查询:

User.search( from: 0, size: 1000, query: { bool: { must: [ {match: { assembly_district: "AD\-13"}}, {match: { election_district: "ED\-011"}} ] } } ).records.last
这将返回与AssemblyDistrict AD-13和“同时”election_district ED-011匹配的前1000条记录。因此,在您的情况下,您会:

Book.search( query: { bool: { must: [ {match: { subject: "general"}} ] } } ).results
“From”是偏移量,“size”是返回的最大数据集。另外,我看到很多人忽视的一个关键问题是,当您在数据库中搜索数据时,您知道要查找的确切值,您可以使用过滤器而不是查询,这样搜索速度会快得多。如果您知道需要与主题“一般”完全匹配,而不是迂回或接近主题,那么下面将介绍如何使用过滤器

Book.search( query: { bool: { filter: [ {term: { subject: "general"}} ] } } ).results

如果要使用
query\u字符串
query,则可以将
默认字段
更改为默认值,即
\u all

或者您可以使用
字段


我想如果您在方法中使用字段名作为参数会更好。

谢谢您的回复。所以我有这样的要求,我只想搜索所有书中所有题目的标题,只需要这个结果。哦,我明白了,我现在正在从我的手机打字,但是我建议尝试把中间的查询改为主题:{标题:‘一般’},而不是主题:“一般”。当我回到我的公司时,我会更深入地了解。我只需要搜索主题的标题。所以我可以像主题一样进行查询吗[:title]意味着它将只搜索主题的“title”字段你可以进行[“subject.title”]
{
    query: {
        query_string: {
            query:            query,
            default_operator: 'AND',
            default_field : 'subject.title'
        }
    }
}
{
    query: {
        query_string: {
            query:            query,
            default_operator: 'AND',
            fields : ['subject.title']
        }
    }
}