標籤: microsoft
讓 nextcloud 有全文檢索能力FullText Search ElasticSearch
nextcloud 搜尋很好用,若能有全文檢索能力就更棒了,於是外掛 fulltextsearch_elasticsearch就登場了。
開發團隊只針對還在維護的nextcloud版本進行更新,也就是說一旦我們的nextcloud已經EOL了,就不會再收到ElasticSearch的更新。
以下是甘苦談
原本使用的nextcloud 25.x 能搭配ElasticSearch 7.x ,但遇到外掛存在非常嚴重效能低下問題(兩萬個檔案有設定分享,100人使用,建立索引表算一算需要至少三、四個月,太誇張了);由於nextcloud 25版已經停止維護,於是我只剩下升級nextcloud一途。
我的nextcloud架設在 CentOS 7,docker上面跑好多容器,很穩定;但nextcloud要升級到26時候,出現容器dns錯亂,無法進行dns查詢,只好先還原回25版。
初步認定是CentOS 7或docker版本過於老舊,但我不敢隨意升級docker,最後只能將nextcloud資料複製到新的虛擬主機(RockyLinux 9.4),測試由25升級到26,然後26升級27 結果就很正常,沒有出現dns錯亂問題。
移轉注意事項請參考「將nextcloud從CentOS7移轉到RockyLinux9。」
** 升級nextcloud到27,搭配新fulltextsearch外掛,初始索引要18小時,效率差了百倍以上。
開始安裝囉
安裝 ElasticSearch 8.x(ES 8) 引擎
Nextcloud 26或以上必須搭配 ES 8,最新docker版本可至此查詢 https://hub.docker.com/_/elasticsearch
#RockyLinux 9.4、docker 27.0.2
############## 檔案 ./docker-compose.yaml ################
version: "3.9"
services:
elasticsearch:
build:
context: .
dockerfile: ./docker/es/Dockerfile
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- xpack.security.http.ssl:enabled=false
ports:
- 9200:9200
- 9300:9300
networks:
- elastic
restart: always
volumes:
- indexdata:/usr/share/elasticsearch/data
# 索引過的資料將存放到 /usr/share/elasticsearch/data裡面
networks:
elastic:
driver: bridge
volumes:
indexdata:
driver: local
###########################################################
################ 檔案 ./docker/es/Dockerfile ###############
FROM elasticsearch:8.14.2
# ingest-attachment 一定要安裝
RUN bin/elasticsearch-plugin install ingest-attachment
###########################################################
# 執行容器
docker-compose up -d
安裝完畢,瀏覽器測試一下引擎是否正常 http://ip:9200/ ,事後需填入到nextcloud外掛設定裡面。
nextcloud 安裝外掛 fulltextsearch

#若安裝出問題,請移除app後,再刪除以下資料庫資料,之後就可以正常安裝了
drop table oc_fulltextsearch_indexes;
drop table oc_fulltextsearch_ticks;
delete from oc_appconfig where appid='fulltextsearch';
delete from oc_appconfig where appid='fulltextsearch_elasticsearch';
delete from oc_appconfig where appid='files_fulltextsearch';
delete from oc_appconfig where appid='files_fulltextsearch_tesseract';
DELETE FROM oc_migrations WHERE app='fulltextsearch';
DELETE FROM oc_preferences WHERE appid='fulltextsearch';
外掛需要設定
外掛安裝完畢,還需要填入引擎網址、與索引名稱,其他預設值即可。

「檢查」外掛設定是否正常
docker exec -t --user www-data <nextcloud容器名稱> php occ fulltextsearch:check

「測試」外掛設定是否正常
docker exec -t --user www-data <nextcloud容器名稱> php occ fulltextsearch:test
一切正常後,就可以開始建立索引表了,這裡建議定期重做索引。
docker exec -t --user www-data <nextcloud容器名稱> php occ fulltextsearch:index
這裡強烈建議「文件掃描PDF檔」需要利用acrobat adobe pro版內建文字辨識功能(OCR),進行一次自我辨識

第一次初始化索引建立後,才可以使用

最後還需要額外執行live指令,針對後續異動的檔案進行索引
# 自動索引官方沒建議怎做,我自己是在容器本體VM(RL9.4)利用console常駐執行
# 這樣做比較麻煩,需要注意重開後需要手動做
docker exec -t --user www-data <nextcloud容器名稱> php occ fulltextsearch:live
** 有一次我要刪除原本的索引,一直失敗,搞了很久很久很久很久,才發現要先進入容器下指令才有用
docker exec -t --user www-data <nextcloud容器名稱> php occ fulltextsearch:reset

** 目錄裡面新增「 .noindex」 這個檔案,就可以不做index
** 若有安裝tesseract ocr這個外掛,記得進nextcloud容器,額外安裝相關程式(此功能我一直沒成功過)
apt install tesseract-ocr tesseract-ocr-chi-tra-vert tesseract-ocr-chi-tra tesseract-ocr-chi-sim tesseract-ocr-script-viet tesseract-ocr-script-hant tesseract-ocr-script-hant-vert
** 以前安裝Micro$oft單機版sharepoint,是個重量級系統,早就有全文檢索功能,但實在是太吃系統資源了,果斷不用。
access資料庫mdb檔案,資料刪掉,需要進行壓縮處理
公司考勤系統使用access資料檔案(mdb),幾十年來資料已經達到約400MB,經過SQL進行刪除不要的資料後,實體檔案居然還是一樣大都沒變,後來發現可以使用microsoft access 2016打開該檔案,進行壓縮處裡,就可以解決了。

visual studio c# 程式以管理者權限執行
修改註冊表以停用切換中文輸入法(shift鍵)
話說我一度以為酪梨醬解決了切換中文輸入的問題,結果並沒有,真是掉漆。
後來我只能退而求其次,使用酪梨醬之前,先關掉左邊shift鍵來停用主機本體的中文切換,這樣就可以解決遠端連線切換問題;使用完畢後,再還原主機本體的左邊shift鍵。

這樣做法對我來說不是很難,但難的是”會忘記”切換回來,所以我也不用問麻瓜了,自己都不能接受這做法。
於是我再再退而求其次,找到透過「修改註冊表」的方式,來「停用/啟用」切換中文輸入法。
# dos 指令
# 0x00000001 (啟用)、0x00000002 (停用)
powershell -Command Set-ItemProperty -Path 'HKCU:\Software\Microsoft\IME\15.0\IMETC' -Name 'Left Shift Usage' -Value 0x00000002
這樣或許我就可以寫個簡單的windows程式,或是批次檔案,一旦執行,會先關閉左邊shift鍵切換中文功能,然後召換chrome瀏覽器帶出酪梨醬網址,使用完畢後,程式或是批次檔案會自動回原回原本的設定,這樣就不會再忘記切換回來了。
# dos 指令 (存成bat檔案) powershell -Command Set-ItemProperty -Path 'HKCU:\Software\Microsoft\IME\15.0\IMETC' -Name 'Left Shift Usage' -Value 0x00000002 powershell -NoProfile -Command ^ Start-Process -passthru chrome.exe '酪梨醬網址' ; ^ while ((get-process -name chrome).count -ne 0){} powershell -Command Set-ItemProperty -Path 'HKCU:\Software\Microsoft\IME\15.0\IMETC' -Name 'Left Shift Usage' -Value 0x00000001
更改windows 10、11開機後顯示登入的帳號
一般來說個人用的Windows,本機帳號可以直接登入;若為公司網域帳號或個人m$的帳號,就必須經過認證(密碼,認證器)才能登入。而且windows會記住上次登入的帳號,重開機後,會直接顯示該帳號,我們只要輸入密碼,就能登入了。
但是麻瓜們總是會忘記自己登入的帳號,一旦有人用其他帳號登入,那麼下次開機,windows顯示的就不是原本麻瓜的帳號,這樣麻瓜會爆走,IT就挨踢了。
為了解決這個問題,我挖阿挖阿挖,在這裡找到解法,只要修改註冊值,重新開機就好了。
註冊表
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI
註冊值
LastLoggedOnDisplayName 設定「網域\帳號」,如:SHORTDOMAIN\kafeiou (這我沒看到,沒設定好像也沒差)
LastLoggedOnSAMUser 設定「網域\帳號」,如:SHORTDOMAIN\kafeiou
LastLoggedOnUser 設定「網域\帳號」,如:SHORTDOMAIN\kafeiou
LastLoggedOnUserSID 輸入該帳號的SID,如:S-1-5-21-112
SelectedUserSID 輸入該帳號的SID,如:S-1-5-21-112
其中SID取得方式:
wmic useraccount where name='登入帳號'

另外還有人說這個地方也要改
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\LastUsedUsername
也有人說要檢查這裡
netplwiz
**臨時用其他帳號登入,又不想被人家發現,可以以照上述方法(需管理者權限),改回原本登入帳號。
讓老電腦順順跑win10_win11
我有一台13年前的pentium老電腦4GB ram,安裝windows 10、windows 11都覺得好慢好慢,偶然間看到「雲爸的私處」寫的一篇文章「低端電腦救星 ReviOS Windows 11精簡版系統」,文章推薦的「Revision」是開源軟體。該軟體以前會提供整個windows iso檔,讓人下載後直接安裝;後來改成「腳本」方式,我們只要正常安裝windows,再執行AME Wizard優化程式,載入Revision的腳本,就可以讓舊電腦優化了。
- 安裝windows相關元件
VisualCppRedist_AIO_x86_x64 - 執行windows優化軟體
AME Wizard - 透過AME Wizard執行Revi優化腳本
AME Wizard執行後,需要載入Revi提供的優化腳本,副檔名為apbx
Revi優化腳本 - 首先腳本會要求關閉windows預設的防禦防毒機制,接下來一直下一步,都用預設值,最後重新開機,就大功告成了
系統預設會停用更新,可透過桌面上的RevisionTool工具改成可更新





備份神器restic必須搭配restic-browser
windows畢竟還是主流,所以在windows上設定restic備份之後,事後要提取還原,windows系統上必須搭配好用的GUI軟體,因此我推薦 https://github.com/emuell/restic-browser
outlook另存msg格式檔案,對方看不懂
outlook作為麻瓜收發郵件軟體最高殿堂,另存檔案當然只能讓outlook打開,其餘閒雜軟體皆不可冒犯。
某日一麻瓜以附件方式,寄給朋友,豈料朋友並沒有outlook,無法開啟msg格式附件,真是大膽!麻瓜求助郎中,郎中開出一帖msgviewer軟體,該軟體佐以java服用,即可將outlook之msg檔案,轉成eml格式(國際標準rfc822格式),經熬煮60個時辰煉化成eml,檔案寄給朋友,朋友以異端thunderbird軟體開啟,正確無誤。

jgit clone專案失敗,原來要把帳號密碼存起來才行
自己寫 java 呼叫 jgit 函式庫clone專案,卻失敗,我看到錯誤訊息是沒有帳號密碼;可是程式明明有輸入帳號密碼,後來爬文才發現我有案子有使用LFS,需要設定快取把帳號密碼儲存起來,否則會一直要求輸入帳號密碼造成程式錯誤。
git lfs 需要2.0或是以上才行
git config --global lfs.cachecredentials