mirror of
https://github.com/discourse/discourse.git
synced 2024-12-02 07:23:40 +08:00
DEV: Add more granularity to SearchIndexer
versions.
Sometimes, we just want to reindex a specific model and not all the things.
This commit is contained in:
parent
4b053462c0
commit
609ba50fe8
|
@ -140,7 +140,7 @@ module Jobs
|
||||||
def load_problem_post_ids(limit)
|
def load_problem_post_ids(limit)
|
||||||
params = {
|
params = {
|
||||||
locale: SiteSetting.default_locale,
|
locale: SiteSetting.default_locale,
|
||||||
version: SearchIndexer::INDEX_VERSION,
|
version: SearchIndexer::POST_INDEX_VERSION,
|
||||||
limit: limit
|
limit: limit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ module Jobs
|
||||||
def load_problem_category_ids(limit)
|
def load_problem_category_ids(limit)
|
||||||
Category.joins(:category_search_data)
|
Category.joins(:category_search_data)
|
||||||
.where('category_search_data.locale != ?
|
.where('category_search_data.locale != ?
|
||||||
OR category_search_data.version != ?', SiteSetting.default_locale, SearchIndexer::INDEX_VERSION)
|
OR category_search_data.version != ?', SiteSetting.default_locale, SearchIndexer::CATEGORY_INDEX_VERSION)
|
||||||
.order('categories.id asc')
|
.order('categories.id asc')
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.pluck(:id)
|
.pluck(:id)
|
||||||
|
@ -174,7 +174,7 @@ module Jobs
|
||||||
def load_problem_topic_ids(limit)
|
def load_problem_topic_ids(limit)
|
||||||
Topic.joins(:topic_search_data)
|
Topic.joins(:topic_search_data)
|
||||||
.where('topic_search_data.locale != ?
|
.where('topic_search_data.locale != ?
|
||||||
OR topic_search_data.version != ?', SiteSetting.default_locale, SearchIndexer::INDEX_VERSION)
|
OR topic_search_data.version != ?', SiteSetting.default_locale, SearchIndexer::TOPIC_INDEX_VERSION)
|
||||||
.order('topics.id desc')
|
.order('topics.id desc')
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.pluck(:id)
|
.pluck(:id)
|
||||||
|
@ -183,7 +183,7 @@ module Jobs
|
||||||
def load_problem_user_ids(limit)
|
def load_problem_user_ids(limit)
|
||||||
User.joins(:user_search_data)
|
User.joins(:user_search_data)
|
||||||
.where('user_search_data.locale != ?
|
.where('user_search_data.locale != ?
|
||||||
OR user_search_data.version != ?', SiteSetting.default_locale, SearchIndexer::INDEX_VERSION)
|
OR user_search_data.version != ?', SiteSetting.default_locale, SearchIndexer::USER_INDEX_VERSION)
|
||||||
.order('users.id asc')
|
.order('users.id asc')
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.pluck(:id)
|
.pluck(:id)
|
||||||
|
@ -192,7 +192,7 @@ module Jobs
|
||||||
def load_problem_tag_ids(limit)
|
def load_problem_tag_ids(limit)
|
||||||
Tag.joins(:tag_search_data)
|
Tag.joins(:tag_search_data)
|
||||||
.where('tag_search_data.locale != ?
|
.where('tag_search_data.locale != ?
|
||||||
OR tag_search_data.version != ?', SiteSetting.default_locale, SearchIndexer::INDEX_VERSION)
|
OR tag_search_data.version != ?', SiteSetting.default_locale, SearchIndexer::TAG_INDEX_VERSION)
|
||||||
.order('tags.id asc')
|
.order('tags.id asc')
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.pluck(:id)
|
.pluck(:id)
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class SearchIndexer
|
class SearchIndexer
|
||||||
INDEX_VERSION = 3
|
POST_INDEX_VERSION = 3
|
||||||
|
TOPIC_INDEX_VERSION = 3
|
||||||
|
CATEGORY_INDEX_VERSION = 3
|
||||||
|
USER_INDEX_VERSION = 3
|
||||||
|
TAG_INDEX_VERSION = 3
|
||||||
REINDEX_VERSION = 0
|
REINDEX_VERSION = 0
|
||||||
|
|
||||||
def self.disable
|
def self.disable
|
||||||
|
@ -67,7 +71,7 @@ class SearchIndexer
|
||||||
raw_data: indexed_data,
|
raw_data: indexed_data,
|
||||||
id: id,
|
id: id,
|
||||||
locale: SiteSetting.default_locale,
|
locale: SiteSetting.default_locale,
|
||||||
version: INDEX_VERSION,
|
version: const_get("#{table.upcase}_INDEX_VERSION"),
|
||||||
tsvector: tsvector,
|
tsvector: tsvector,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ describe Search do
|
||||||
|
|
||||||
expect do
|
expect do
|
||||||
topic.update!(title: "harpi is the new title")
|
topic.update!(title: "harpi is the new title")
|
||||||
end.to change { post2.reload.post_search_data.version }.from(SearchIndexer::INDEX_VERSION).to(SearchIndexer::REINDEX_VERSION)
|
end.to change { post2.reload.post_search_data.version }.from(SearchIndexer::POST_INDEX_VERSION).to(SearchIndexer::REINDEX_VERSION)
|
||||||
|
|
||||||
expect(post.post_search_data.reload.search_data).to match(/harpi/)
|
expect(post.post_search_data.reload.search_data).to match(/harpi/)
|
||||||
end
|
end
|
||||||
|
@ -33,8 +33,8 @@ describe Search do
|
||||||
it 'should update posts index when topic category changes' do
|
it 'should update posts index when topic category changes' do
|
||||||
expect do
|
expect do
|
||||||
topic.update!(category: Fabricate(:category))
|
topic.update!(category: Fabricate(:category))
|
||||||
end.to change { post.reload.post_search_data.version }.from(SearchIndexer::INDEX_VERSION).to(SearchIndexer::REINDEX_VERSION)
|
end.to change { post.reload.post_search_data.version }.from(SearchIndexer::POST_INDEX_VERSION).to(SearchIndexer::REINDEX_VERSION)
|
||||||
.and change { post2.reload.post_search_data.version }.from(SearchIndexer::INDEX_VERSION).to(SearchIndexer::REINDEX_VERSION)
|
.and change { post2.reload.post_search_data.version }.from(SearchIndexer::POST_INDEX_VERSION).to(SearchIndexer::REINDEX_VERSION)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should update posts index when topic tags changes' do
|
it 'should update posts index when topic tags changes' do
|
||||||
|
@ -44,8 +44,8 @@ describe Search do
|
||||||
expect do
|
expect do
|
||||||
DiscourseTagging.tag_topic_by_names(topic, Guardian.new(admin), [tag.name])
|
DiscourseTagging.tag_topic_by_names(topic, Guardian.new(admin), [tag.name])
|
||||||
topic.save!
|
topic.save!
|
||||||
end.to change { post.reload.post_search_data.version }.from(SearchIndexer::INDEX_VERSION).to(SearchIndexer::REINDEX_VERSION)
|
end.to change { post.reload.post_search_data.version }.from(SearchIndexer::POST_INDEX_VERSION).to(SearchIndexer::REINDEX_VERSION)
|
||||||
.and change { post2.reload.post_search_data.version }.from(SearchIndexer::INDEX_VERSION).to(SearchIndexer::REINDEX_VERSION)
|
.and change { post2.reload.post_search_data.version }.from(SearchIndexer::POST_INDEX_VERSION).to(SearchIndexer::REINDEX_VERSION)
|
||||||
|
|
||||||
expect(topic.tags).to eq([tag])
|
expect(topic.tags).to eq([tag])
|
||||||
end
|
end
|
||||||
|
@ -77,10 +77,10 @@ describe Search do
|
||||||
it 'should update posts index when category name changes' do
|
it 'should update posts index when category name changes' do
|
||||||
expect do
|
expect do
|
||||||
category.update!(name: 'some new name')
|
category.update!(name: 'some new name')
|
||||||
end.to change { post.reload.post_search_data.version }.from(SearchIndexer::INDEX_VERSION).to(SearchIndexer::REINDEX_VERSION)
|
end.to change { post.reload.post_search_data.version }.from(SearchIndexer::POST_INDEX_VERSION).to(SearchIndexer::REINDEX_VERSION)
|
||||||
.and change { post2.reload.post_search_data.version }.from(SearchIndexer::INDEX_VERSION).to(SearchIndexer::REINDEX_VERSION)
|
.and change { post2.reload.post_search_data.version }.from(SearchIndexer::POST_INDEX_VERSION).to(SearchIndexer::REINDEX_VERSION)
|
||||||
|
|
||||||
expect(post3.post_search_data.version).to eq(SearchIndexer::INDEX_VERSION)
|
expect(post3.post_search_data.version).to eq(SearchIndexer::POST_INDEX_VERSION)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ describe Jobs::ReindexSearch do
|
||||||
|
|
||||||
subject.execute({})
|
subject.execute({})
|
||||||
expect(model.public_send("#{m}_search_data").version)
|
expect(model.public_send("#{m}_search_data").version)
|
||||||
.to eq(SearchIndexer::INDEX_VERSION)
|
.to eq("SearchIndexer::#{m.upcase}_INDEX_VERSION".constantize)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,7 @@ describe SearchIndexer do
|
||||||
raw_data, locale, version = PostSearchData.where(post_id: post_id).pluck(:raw_data, :locale, :version)[0]
|
raw_data, locale, version = PostSearchData.where(post_id: post_id).pluck(:raw_data, :locale, :version)[0]
|
||||||
expect(raw_data).to eq("This is a test")
|
expect(raw_data).to eq("This is a test")
|
||||||
expect(locale).to eq(SiteSetting.default_locale)
|
expect(locale).to eq(SiteSetting.default_locale)
|
||||||
expect(version).to eq(SearchIndexer::INDEX_VERSION)
|
expect(version).to eq(SearchIndexer::POST_INDEX_VERSION)
|
||||||
|
|
||||||
SearchIndexer.update_posts_index(post_id, "tester", "", nil, nil)
|
SearchIndexer.update_posts_index(post_id, "tester", "", nil, nil)
|
||||||
|
|
||||||
|
@ -209,7 +209,7 @@ describe SearchIndexer do
|
||||||
)
|
)
|
||||||
|
|
||||||
expect(post2.reload.post_search_data.version).to eq(
|
expect(post2.reload.post_search_data.version).to eq(
|
||||||
SearchIndexer::INDEX_VERSION
|
SearchIndexer::POST_INDEX_VERSION
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user