From 5fc8e6c5104cbd4f6ceaba9f0d0fccccce77d003 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Fri, 9 Sep 2016 23:10:27 +0200 Subject: [PATCH] Added elasticsearch 2.4 support. --- app/models/ticket/search.rb | 6 +++--- app/models/ticket/search_index.rb | 10 ++++----- lib/tasks/search_index_es.rake | 7 +++--- test/integration/elasticsearch_test.rb | 30 ++++++++++++++++++++++++-- 4 files changed, 40 insertions(+), 13 deletions(-) diff --git a/app/models/ticket/search.rb b/app/models/ticket/search.rb index 65b842ffb..1149f6ecc 100644 --- a/app/models/ticket/search.rb +++ b/app/models/ticket/search.rb @@ -111,18 +111,18 @@ returns group_condition.push group.id } access_condition = { - 'query_string' => { 'default_field' => 'Ticket.group_id', 'query' => "\"#{group_condition.join('" OR "')}\"" } + 'query_string' => { 'default_field' => 'group_id', 'query' => "\"#{group_condition.join('" OR "')}\"" } } else access_condition = if !current_user.organization || ( !current_user.organization.shared || current_user.organization.shared == false ) { - 'query_string' => { 'default_field' => 'Ticket.customer_id', 'query' => current_user.id } + 'query_string' => { 'default_field' => 'customer_id', 'query' => current_user.id } } # customer_id: XXX # conditions = [ 'customer_id = ?', current_user.id ] else { - 'query_string' => { 'query' => "Ticket.customer_id:#{current_user.id} OR Ticket.organization_id:#{current_user.organization.id}" } + 'query_string' => { 'query' => "customer_id:#{current_user.id} OR organization_id:#{current_user.organization.id}" } } # customer_id: XXX OR organization_id: XXX # conditions = [ '( customer_id = ? OR organization_id = ? )', current_user.id, current_user.organization.id ] diff --git a/app/models/ticket/search_index.rb b/app/models/ticket/search_index.rb index f6b87ad92..4ea84500f 100644 --- a/app/models/ticket/search_index.rb +++ b/app/models/ticket/search_index.rb @@ -33,7 +33,7 @@ returns # collect article data articles = Ticket::Article.where(ticket_id: id) - attributes['articles'] = [] + attributes['article'] = [] articles.each { |article| article_attributes = article.attributes @@ -53,8 +53,8 @@ returns # lookup attachments article.attachments.each { |attachment| - if !article_attributes['attachments'] - article_attributes['attachments'] = [] + if !article_attributes['attachment'] + article_attributes['attachment'] = [] end # check file size @@ -73,9 +73,9 @@ returns '_name' => attachment.filename, '_content' => Base64.encode64(attachment.content) } - article_attributes['attachments'].push data + article_attributes['attachment'].push data } - attributes['articles'].push article_attributes + attributes['article'].push article_attributes } attributes diff --git a/lib/tasks/search_index_es.rake b/lib/tasks/search_index_es.rake index 705c61be5..5a1b47e5a 100644 --- a/lib/tasks/search_index_es.rake +++ b/lib/tasks/search_index_es.rake @@ -21,12 +21,13 @@ namespace :searchindex do data: { mappings: { Ticket: { - _source: { excludes: [ 'articles.attachments' ] }, + _source: { excludes: [ 'article.attachment' ] }, properties: { - articles: { + article: { type: 'nested', + include_in_parent: true, properties: { - attachments: { + attachment: { type: 'attachment', } } diff --git a/test/integration/elasticsearch_test.rb b/test/integration/elasticsearch_test.rb index 52350299a..6b8e991fc 100644 --- a/test/integration/elasticsearch_test.rb +++ b/test/integration/elasticsearch_test.rb @@ -148,7 +148,6 @@ class ElasticsearchTest < ActiveSupport::TestCase ) attributes = ticket1.search_index_attribute_lookup - assert_equal('Users', attributes['group']) assert_equal('new', attributes['state']) assert_equal('2 normal', attributes['priority']) @@ -472,7 +471,34 @@ class ElasticsearchTest < ActiveSupport::TestCase limit: 15, ) assert(result[0], 'record 1') - assert(!result[1], 'record 1') + assert(!result[1], 'record 2') + assert_equal(result[0].id, ticket1.id) + + result = Ticket.search( + current_user: agent, + query: 'state:open', + limit: 15, + ) + assert(result[0], 'record 1') + assert(!result[1], 'record 2') + assert_equal(result[0].id, ticket2.id) + + result = Ticket.search( + current_user: agent, + query: '"some_sender@example.com"', + limit: 15, + ) + assert(result[0], 'record 1') + assert(!result[1], 'record 2') + assert_equal(result[0].id, ticket1.id) + + result = Ticket.search( + current_user: agent, + query: 'article.from:"some_sender@example.com"', + limit: 15, + ) + assert(result[0], 'record 1') + assert(!result[1], 'record 2') assert_equal(result[0].id, ticket1.id) end