本文主要闡述利用ES、知識(shí)圖譜(Neo4j)實(shí)現(xiàn)全文檢索,并利用ElasticSearch Head開源項(xiàng)目進(jìn)行全文檢索測試。實(shí)驗(yàn)在圖譜的幫助下如何開展全文檢索功能,為后續(xù)的復(fù)雜查詢或語義檢索做準(zhǔn)備。
一、運(yùn)行環(huán)境
1.Linux 7.5
2.JDK 1.8.0_191
3.ElasticSearch 7.17.4,注意用ES自帶的jdk,因?yàn)檫@個(gè)版本的ES需要JDK11以上,配置見第二條內(nèi)容。
4.Neo4j 3.5.28
5.Elasticsearch-head:
GitHub - mobz/elasticsearch-head: A web front end for an elastic search cluster
二、ES和Neo4j的安裝配置:
詳細(xì)的安裝配置本文略去,主要給出關(guān)鍵配置信息,可以參考其他安裝配置,如大家需要,再咨詢我。
1.
配置ES--java11環(huán)境:打開ES的bin下面elasticsearch和elasticsearch-cli文件,在最前面添加如下信息,將默認(rèn)jdk調(diào)整為es自帶的jdk,這樣不改變整個(gè)系統(tǒng)的java環(huán)境,只是在運(yùn)行ES時(shí)用指定的java環(huán)境。
#配置自己的jdk11
export JAVA_HOME=/home/es/elasticsearch-7.17.4/jdk
export PATH=$JAVA_HOME/bin:$PATH
2.配置ES--在config目錄,打開
elasticsearch.yml,配置信息如下
node.master:true 或者?node.name: node-1
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
#允許各種http請求
http.cors.allow-methods: OPTIONS,HEAD,GET,POST,PUT,DELETE
http.cors.allow-headers: Content-Type,Accept,Authorization,x-requested-with
#集群節(jié)點(diǎn)存儲(chǔ)空間大小限制解決的配置選項(xiàng)
cluster.routing.allocation.disk.threshold_enabled: false
cluster.initial_master_nodes: ["node-1"]
#配置X-Pack,401問題解決的配置選項(xiàng)
xpack.security.enabled: false
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
3.啟動(dòng)ElasticSearch
前面配置完畢后,基本可以啟動(dòng)ES了,進(jìn)入bin目錄,運(yùn)行
elasticsearch 或者
elasticsearch -d,后者表示后臺(tái)啟動(dòng),如果出現(xiàn)如下錯(cuò)誤,請安裝要求配置。
錯(cuò)誤1:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
root 用戶:vi /etc/sysctl.conf 添加 vm.max_map_count=262144:保存退出之后,執(zhí)行命令 sysctl -p
錯(cuò)誤2:max number of threads is too low
root 用戶:vi /etc/security/limits.conf 在文件最后添加
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
錯(cuò)誤3:
max number of threads [1024] for user [elasticsearch] is too low, increase to at least [4096],該錯(cuò)誤對應(yīng)的配置文件,默認(rèn)配置好了, 不需要單獨(dú)配置。
vi /etc/security/limits.d/90-nproc.conf 改為4096
修改完記得退出es用戶,再執(zhí)行啟動(dòng)命令。
cp -r /home/hadoop/app/elasticsearch-7.17.4 /home/es/elasticsearch-7.17.4
4.查看ES運(yùn)行情況(瀏覽器)
http://192.168.107.128:9200/ 查看可用情況
http://192.168.107.128:9200/_cat/nodes?v 查看節(jié)點(diǎn)情況
http://192.168.107.128:9200/_cat/health?v 查看健康狀態(tài)
http://192.168.107.128:9200/_cat/indices?v?查看所有索引
5.配置訪問ES的用戶密碼,主要用于配置ElasticSearch-head和Kibana客戶端訪問ES的用戶密碼。
執(zhí)行命令:elasticsearch-setup-passwords interactive
user:elastic/kibana_system/其他用戶等
pwd:eses456
其他用戶的密碼同上。
6.安裝plugin
安裝IK分詞器:elasticsearch-plugin install analysis-icu
elasticsearch-plugin install
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.4/elasticsearch-analysis-ik-7.17.4.zip
查看安裝的plugin
:
elasticsearch-plugin list
刪除plugin:
elasticsearch-plugin remove analysis-icu
7.配置用戶自定義配置詞典,進(jìn)入es的config下,進(jìn)入analysis-ik,打開IKAnalyzer.cfg.xml,配置自定義詞典信息如下:
<entry key="ext_dict">userdefine.dic</entry>
在
userdefine.dic配置如下信息,重啟ES后就會(huì)自動(dòng)整體分詞。
美團(tuán)
地層
儲(chǔ)層
8.配置Neo4j-
elasticsearch
下載neo4j-elasticsearch-3.5.6.jar,放在neo4j的plugin目錄下。
配置neo4j,neo4j.conf
elasticsearch.host_name=
http://192.168.107.128:9200
elasticsearch.index_spec=result:result(
name),resultsummary:resultSummary(abstract,name),resultkeys:resultKeys(name)? #這里的第一個(gè)result表示節(jié)點(diǎn)標(biāo)簽,第二個(gè)result表示ES中的result索引名稱,name表示將result節(jié)點(diǎn)中name屬性值。
多個(gè)索引關(guān)聯(lián)見下一行的示例(中間逗號(hào)分隔)。
9.Elasticsearch-head配置:下載完成后進(jìn)入根目錄,啟動(dòng)前端項(xiàng)目后直接運(yùn)行(npm run start)。
elasticsearch-head主要是驗(yàn)證在Neo4j插入新的節(jié)點(diǎn)和關(guān)系時(shí),數(shù)據(jù)同時(shí)同步到ES中,并測試是否提供全文檢索等。
問題:
elasticsearch-
head無法連接ES的問題及解決方案
打開es配置文件,看看是否有以下幾行配置信息。即可解決。
#允許跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
#允許各種http請求
http.cors.allow-methods: OPTIONS,HEAD,GET,POST,PUT,DELETE
http.cors.allow-headers: Content-Type,Accept,Authorization,x-requested-with
#401問題解決的配置選項(xiàng)
xpack.security.enabled: false
#集群節(jié)點(diǎn)存儲(chǔ)空間大小限制解決的配置選項(xiàng)
cluster.routing.allocation.disk.threshold_enabled: false
三、全文檢索應(yīng)用實(shí)踐
(一)直接在控制臺(tái)下,運(yùn)行測試Neo4j或Neo4j和ES配置是否正常,具體如下:
查詢(neo4j):
curl -X POST
http:
/
/192.168.107.128:7474/db
/data/cypher
-H
'authorization: Basic bmVvNGo6bmVvbmVv'
-H
'content-type: application/json'
-d
'{ "query" : "MATCH (n:result{name:'張三') Return n" }'
查詢(es):
curl -X
GET
'http://
192.168.107.128
:9200/result/_search?pretty='
創(chuàng)建新節(jié)點(diǎn)(neo4j+es):
curl -X POST
http:
/
/192.168.107.128:7474/db
/data/cypher
-H
'authorization: Basic bmVvNGo6bmVvbmVv'
-H
'content-type: application/json'
-d
'{
"query"
:
"CREATE (n:result { name: {
name1
}}) RETURN n"
,
"params"
: {
"name1"
:
"測試20221218"?
}
}'
(二)利用apoc調(diào)用ES(官方-
ElasticSearch - APOC Extended Documentation)
1.
查看es狀態(tài):?
call
?apoc
.
es
.
stats
(
"192.168.107.128"
)
2.查詢檢索:
CALL?apoc.es.getRaw("192.168.107.128",'resultsummary/_search?',null)?YIELD?value?
UNWIND?value.hits.hits?as?hits
RETURN?hits['_source']?LIMIT?100
3.查詢,關(guān)鍵詞過濾-dsl query
CALL?apoc.es.getRaw("192.168.107.128","resultsummary/_search?",{
??query:?{match_phrase:{name:?"處理"}}
})
YIELD?value?
UNWIND?value.hits.hits?as?hits
RETURN?hits['_source']?LIMIT?100
4.查找resultsummary索引中name包含處理的節(jié)點(diǎn),并返回符合查詢的title列表
CALL?apoc.es.getRaw("192.168.107.128","resultsummary/_search?",{
??query:?{match_phrase:{name:?"處理"}}
})
YIELD?value?
UNWIND?value.hits.hits?as?hits
UNWIND?hits['_source']['name']?as?name_list?RETURN?name_list
5.查找 knowledgegraph索引中title包含"python"的節(jié)點(diǎn),并返回符合查詢的title列表,并查詢與包含"python"的result節(jié)點(diǎn)相連的一度ACTED_IN邊
CALL?apoc.es.getRaw("192.168.107.128","knowledgegraph/_search?",{
??query:?{match_phrase:{title:?"python"}}
})
YIELD?value?
UNWIND?value.hits.hits?as?hits
with?collect(hits['_source']['title'])?as?title_list?
MATCH?p=(m:result)-[r:ACTED_IN]-(n)?where?m.name?in?title_list?RETURN?p
四、Neo4j自帶的全文檢索插件應(yīng)用。
1.查看分詞器:
call
?db
.
index
.
fulltext
.
listAvailableAnalyzers
2.創(chuàng)建索引:
CALL
?db
.
index
.
fulltext
.
createNodeIndex
(
"summaryFullIndex"
,[
"resultSummary"
],[
"name"
],?
{
?analyzer
:?
"cjk"
})
3.使用索引:
查找包含儲(chǔ)層評價(jià)的報(bào)告
CALL?db.index.fulltext.queryNodes("summaryFullIndex","儲(chǔ)層評價(jià)")?YIELD?node,?score
RETURN?node,?score
查找即包含綜合,又做過核磁或密度的數(shù)據(jù)
CALL?db.index.fulltext.queryNodes("summaryFullIndex","綜合")?YIELD?node
where?node.name?contains?"合成"??
where?node.name?contains?"密度"?
return?node??
order?by?node.name??
skip?0
limit?10
4.刪除全文索引
call?db.index.fulltext.drop("summaryFullIndex")
文章來源地址http://www.zghlxwxcb.cn/news/detail-485750.html
文章來源:http://www.zghlxwxcb.cn/news/detail-485750.html
到了這里,關(guān)于ElasticSearch+Neo4j+ElasticSearch Head實(shí)現(xiàn)全文檢索應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!