gem xapian-ruby
This commit is contained in:
parent
2dbedfa649
commit
32c9435430
2
Gemfile
2
Gemfile
@ -23,7 +23,9 @@
|
||||
source 'https://rubygems.org' do
|
||||
gem 'active_record_union'
|
||||
gem 'ox' # Dav4Rack
|
||||
gem 'rake'
|
||||
gem 'uuidtools'
|
||||
gem 'xapian-ruby'
|
||||
gem 'zip-zip'
|
||||
|
||||
# Redmine extensions
|
||||
|
||||
@ -19,6 +19,8 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require 'xapian'
|
||||
|
||||
# File
|
||||
class DmsfFile < ApplicationRecord
|
||||
include RedmineDmsf::Lockable
|
||||
@ -80,25 +82,6 @@ class DmsfFile < ApplicationRecord
|
||||
|
||||
attr_writer :last_revision
|
||||
|
||||
class << self
|
||||
def xapian_bindings_available?
|
||||
unless @xapian_bindings_available
|
||||
begin
|
||||
require 'xapian'
|
||||
@xapian_bindings_available = true
|
||||
rescue LoadError => e
|
||||
Rails.logger.warn do
|
||||
%{No Xapian search engine interface for Ruby installed => Full-text search won't be available.
|
||||
Install a ruby-xapian package or an alternative Xapian binding (https://xapian.org).}
|
||||
end
|
||||
Rails.logger.warn { e.message }
|
||||
@xapian_bindings_available = false
|
||||
end
|
||||
end
|
||||
@xapian_bindings_available
|
||||
end
|
||||
end
|
||||
|
||||
def self.previews_storage_path
|
||||
Rails.root.join 'tmp/dmsf_previews'
|
||||
end
|
||||
@ -383,7 +366,7 @@ class DmsfFile < ApplicationRecord
|
||||
results = scope.where(find_options).uniq.to_a
|
||||
results.delete_if { |x| !DmsfFolder.permissions?(x.dmsf_folder) }
|
||||
|
||||
if !options[:titles_only] && xapian_bindings_available? # $xapian_bindings_available
|
||||
if !options[:titles_only]
|
||||
database = nil
|
||||
begin
|
||||
lang = Setting.plugin_redmine_dmsf['dmsf_stemming_lang'].strip
|
||||
|
||||
@ -324,36 +324,24 @@
|
||||
|
||||
<hr>
|
||||
|
||||
<% begin %>
|
||||
<% require 'xapian' %>
|
||||
<% xapian_disabled = false %>
|
||||
<% rescue LoadError => e %>
|
||||
<% Rails.logger.warn e.message %>
|
||||
<% xapian_disabled = true %>
|
||||
<% end %>
|
||||
|
||||
<em class="<%= title_klass %>">
|
||||
<%= l(:label_full_text) %>
|
||||
</em>
|
||||
|
||||
<p>
|
||||
<%= content_tag :label, l(:label_index_database) %>
|
||||
<%= text_field_tag 'settings[dmsf_index_database]', @settings['dmsf_index_database'], disabled: xapian_disabled,
|
||||
size: 50 %>
|
||||
<% if xapian_disabled %>
|
||||
<span class="icon icon-warning"><small><%= l(:warning_xapian_not_available) %></small></span>
|
||||
<% end %>
|
||||
<%= text_field_tag 'settings[dmsf_index_database]', @settings['dmsf_index_database'], size: 50 %>
|
||||
<em class="<%= klass %>">
|
||||
<%= l(:label_default) %>: <%= File.expand_path('dmsf_index', Rails.root) %>
|
||||
</em>
|
||||
</p>
|
||||
|
||||
<% stem_langs = %w(danish dutch english finnish french german hungarian italian norwegian portuguese romanian russian spanish swedish turkish) %>
|
||||
<% stem_langs = %w(danish dutch english finnish french german hungarian italian norwegian portuguese romanian russian
|
||||
spanish swedish turkish) %>
|
||||
|
||||
<p>
|
||||
<%= content_tag :label, l(:label_stemming_language) %>
|
||||
<%= select_tag 'settings[dmsf_stemming_lang]', options_for_select(stem_langs, @settings['dmsf_stemming_lang']),
|
||||
disabled: xapian_disabled %>
|
||||
<%= select_tag 'settings[dmsf_stemming_lang]', options_for_select(stem_langs, @settings['dmsf_stemming_lang']) %>
|
||||
<em class="<%= klass %>">
|
||||
<%= l(:note_possible_values) %>: <%= stem_langs.join(', ') %>. <%= "#{l(:label_default)}: #{stem_langs[2]}" %>
|
||||
</em>
|
||||
@ -361,12 +349,15 @@
|
||||
|
||||
<p>
|
||||
<%= content_tag :label, l(:label_stem_strategy) %>
|
||||
<%= radio_button_tag 'settings[dmsf_stemming_strategy]', 'STEM_NONE', @settings['dmsf_stemming_strategy'] == 'STEM_NONE',
|
||||
disabled: xapian_disabled, checked: true %> <%= l(:option_stem_none) %><br>
|
||||
<%= radio_button_tag 'settings[dmsf_stemming_strategy]', 'STEM_SOME', @settings['dmsf_stemming_strategy'] == 'STEM_SOME',
|
||||
disabled: xapian_disabled %> <%= l(:option_stem_some) %><br>
|
||||
<%= radio_button_tag 'settings[dmsf_stemming_strategy]', 'STEM_ALL', @settings['dmsf_stemming_strategy'] == 'STEM_ALL',
|
||||
disabled: xapian_disabled %> <%= l(:option_stem_all) %><br>
|
||||
<%= radio_button_tag 'settings[dmsf_stemming_strategy]', 'STEM_NONE',
|
||||
@settings['dmsf_stemming_strategy'] == 'STEM_NONE', checked: true %> <%= l(:option_stem_none) %>
|
||||
<br>
|
||||
<%= radio_button_tag 'settings[dmsf_stemming_strategy]', 'STEM_SOME',
|
||||
@settings['dmsf_stemming_strategy'] == 'STEM_SOME' %> <%= l(:option_stem_some) %>
|
||||
<br>
|
||||
<%= radio_button_tag 'settings[dmsf_stemming_strategy]', 'STEM_ALL',
|
||||
@settings['dmsf_stemming_strategy'] == 'STEM_ALL' %> <%= l(:option_stem_all) %>
|
||||
<br>
|
||||
<em class="<%= klass %>">
|
||||
<%= l(:text_stemming_info) %>
|
||||
</em>
|
||||
@ -374,7 +365,7 @@
|
||||
|
||||
<p>
|
||||
<%= content_tag :label, l(:label_enable_cjk_ngrams) %>
|
||||
<%= check_box_tag 'settings[dmsf_enable_cjk_ngrams]', true, @settings['dmsf_enable_cjk_ngrams'], disabled: xapian_disabled %>
|
||||
<%= check_box_tag 'settings[dmsf_enable_cjk_ngrams]', true, @settings['dmsf_enable_cjk_ngrams'] %>
|
||||
<em class="<%= klass %>">
|
||||
<%= l(:text_enable_cjk_ngrams) %>
|
||||
</em>
|
||||
|
||||
@ -179,7 +179,6 @@ cs:
|
||||
|
||||
error_file_can_not_be_created: Nelze vytvořit soubor v cílové složce
|
||||
error_wrong_zip_encoding: Chybné kódování Zipu
|
||||
warning_xapian_not_available: Xapian není k dostupný
|
||||
menu_dmsf: DMS # Project tab title
|
||||
label_physical_file_delete: Fyzické smazání souboru
|
||||
user_is_not_project_member: Nejste členem projektu
|
||||
|
||||
@ -176,7 +176,6 @@ de:
|
||||
erstellt werden.
|
||||
error_file_can_not_be_created: Datei kann nicht in dem gewählten Ordner erstellt werden.
|
||||
error_wrong_zip_encoding: Falsche ZIP-Kodierung
|
||||
warning_xapian_not_available: Xapian steht nicht zur Verfügung
|
||||
menu_dmsf: DMS # Project tab title
|
||||
label_physical_file_delete: Datei physisch löschen
|
||||
user_is_not_project_member: Sie sind kein Projektmitglied
|
||||
|
||||
@ -179,7 +179,6 @@ en:
|
||||
|
||||
error_file_can_not_be_created: "Files can't be created in storage directory"
|
||||
error_wrong_zip_encoding: Wrong Zip encoding
|
||||
warning_xapian_not_available: Xapian not available
|
||||
menu_dmsf: DMS # Project tab title
|
||||
label_physical_file_delete: Physical file delete
|
||||
user_is_not_project_member: You are not a member of the project
|
||||
|
||||
@ -179,7 +179,6 @@ es:
|
||||
|
||||
error_file_can_not_be_created: "El archivo no puede ser creado en el directorio destino"
|
||||
error_wrong_zip_encoding: Codificación erronea de Zip
|
||||
warning_xapian_not_available: Xapian no disponible
|
||||
menu_dmsf: DMS # Project tab title
|
||||
label_physical_file_delete: Eliminar archivos físicos
|
||||
user_is_not_project_member: No es miemo del proyecto
|
||||
|
||||
@ -173,7 +173,6 @@ fa:
|
||||
|
||||
error_file_can_not_be_created: "پروندهها نمیتوانند در پوشهی ذخیرهسازی ساخته شوند."
|
||||
error_wrong_zip_encoding: رمزگذاری اشتباه zip
|
||||
warning_xapian_not_available: Xapian در دسترس نیست
|
||||
menu_dmsf: اسناد پیشرفته # Project tab title
|
||||
label_physical_file_delete: پرونده فیزیکی حذف شود
|
||||
user_is_not_project_member: شما عضو این پروژه نیستید
|
||||
|
||||
@ -179,7 +179,6 @@ fr:
|
||||
créé
|
||||
error_file_can_not_be_created: "Le fichier n'a pas pu être enregistré dans le répertoire de stockage"
|
||||
error_wrong_zip_encoding: Mauvais jeu de caractères pour la transformation du nom du ZIP
|
||||
warning_xapian_not_available: Le module Xapian est indisponible
|
||||
menu_dmsf: DMS # Project tab title
|
||||
label_physical_file_delete: Suppression des fichiers
|
||||
user_is_not_project_member: "Vous n'êtes pas un membre du projet"
|
||||
|
||||
@ -179,7 +179,6 @@ hu:
|
||||
|
||||
error_file_can_not_be_created: A fájl nem hozható létre a tárolómappában
|
||||
error_wrong_zip_encoding: Nem megfelelő Zip kódolás
|
||||
warning_xapian_not_available: Xapian nem elérhető
|
||||
menu_dmsf: DMS # Project tab title
|
||||
label_physical_file_delete: Fizikai fájl törölve lett
|
||||
user_is_not_project_member: Ön nem tagja a csoportnak
|
||||
|
||||
@ -179,7 +179,6 @@ it: # Italian strings thx 2 Matteo Arceci!
|
||||
|
||||
error_file_can_not_be_created: "Il documento non può essere creato nella cartella di archiviazione"
|
||||
error_wrong_zip_encoding: Errato encoding dello Zip
|
||||
warning_xapian_not_available: Xapian non disponibile
|
||||
menu_dmsf: Documenti # Project tab title
|
||||
label_physical_file_delete: File fisico eliminato
|
||||
user_is_not_project_member: Non sei un membro del progetto
|
||||
|
||||
@ -179,7 +179,6 @@ ja:
|
||||
|
||||
error_file_can_not_be_created: ファイルを保存フォルダに作成できません
|
||||
error_wrong_zip_encoding: Zip エンコーディングが正しくありません
|
||||
warning_xapian_not_available: Xapian は利用できません
|
||||
menu_dmsf: 文書管理 # Project tab title
|
||||
label_physical_file_delete: 物理ファイルの削除
|
||||
user_is_not_project_member: あなたはプロジェクトのメンバーではありません
|
||||
|
||||
@ -179,7 +179,6 @@ ko:
|
||||
|
||||
error_file_can_not_be_created: 저장 공간에 파일을 생성할 수 없습니다
|
||||
error_wrong_zip_encoding: 올바르지 않은 Zip 인코딩
|
||||
warning_xapian_not_available: Xapian을 사용할 수 없습니다
|
||||
menu_dmsf: DMS
|
||||
label_physical_file_delete: 파일 삭제됨
|
||||
user_is_not_project_member: 이 프로젝트의 구성원이 아닙니다
|
||||
|
||||
@ -179,7 +179,6 @@ nl:
|
||||
|
||||
error_file_can_not_be_created: Bestand kan niet aangemaakt worden in opslag directory
|
||||
error_wrong_zip_encoding: Onjuiste Zip encoding
|
||||
warning_xapian_not_available: Xapian niet beschikbaar
|
||||
menu_dmsf: Easy DMS
|
||||
label_physical_file_delete: Fysiek bestand verwijderen
|
||||
user_is_not_project_member: U bent geen lid van het project
|
||||
|
||||
@ -179,7 +179,6 @@ pl:
|
||||
|
||||
error_file_can_not_be_created: "Plik nie może zostać utworzony w folderze przechowywania"
|
||||
error_wrong_zip_encoding: Złe kodowanie Zip
|
||||
warning_xapian_not_available: Xapian niedostępny
|
||||
menu_dmsf: DMS # Project tab title
|
||||
label_physical_file_delete: Fizyczne usuwanie plików
|
||||
user_is_not_project_member: Nie jesteś przypisany do tego projektu
|
||||
|
||||
@ -179,7 +179,6 @@ pt-BR:
|
||||
criado"
|
||||
error_file_can_not_be_created: "O arquivo não pode ser criado"
|
||||
error_wrong_zip_encoding: Código Zip errado
|
||||
warning_xapian_not_available: Xapian não disponível
|
||||
menu_dmsf: DMS
|
||||
label_physical_file_delete: Excluir fisicamente arquivo
|
||||
user_is_not_project_member: Você não é um membro do projeto
|
||||
|
||||
@ -179,7 +179,6 @@ sl:
|
||||
|
||||
error_file_can_not_be_created: Datoteke se ne da kreirat v mapi
|
||||
error_wrong_zip_encoding: Napačen Zip nabor znakov
|
||||
warning_xapian_not_available: Xapian ni na voljo
|
||||
menu_dmsf: Arhiv # Project tab title
|
||||
label_physical_file_delete: Brisanje datoteke (fizično)
|
||||
user_is_not_project_member: Niste član projekta
|
||||
|
||||
@ -179,7 +179,6 @@ zh-TW:
|
||||
|
||||
error_file_can_not_be_created: 在存儲目錄裡,無法建立檔案。
|
||||
error_wrong_zip_encoding: 不正確的Zip encoding
|
||||
warning_xapian_not_available: Xapian not available
|
||||
menu_dmsf: 文件總管 # Project tab title
|
||||
label_physical_file_delete: 永久刪除檔案
|
||||
user_is_not_project_member: 您不是專案的成員之一
|
||||
|
||||
@ -179,7 +179,6 @@ zh:
|
||||
|
||||
error_file_can_not_be_created: 文件未能在存储目录中创建
|
||||
error_wrong_zip_encoding: 不正确的Zip编码
|
||||
warning_xapian_not_available: Xapian not available
|
||||
menu_dmsf: 文档管家 # Project tab title
|
||||
label_physical_file_delete: 物理删除文件
|
||||
user_is_not_project_member: 您不是该项目的成员
|
||||
|
||||
@ -125,10 +125,6 @@ end
|
||||
log "Redmine environment [RAILS_ENV=#{env}] correctly loaded ...", verbose
|
||||
|
||||
# Indexing documents
|
||||
# unless File.exist?($omindex)
|
||||
# log "#{$omindex} does not exist, exiting...", true
|
||||
# exit 1
|
||||
# end
|
||||
stem_langs.each do |lang|
|
||||
filespath = Setting.plugin_redmine_dmsf['dmsf_storage_directory'] || File.join(REDMINE_ROOT, FILES)
|
||||
unless File.directory?(filespath)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user