es中常用的模糊查詢?yōu)椋?/p>
"query":?{
????????"wildcard":?{
????????????"testWord":?"*測(cè)試數(shù)據(jù)*"
????????}
????}
對(duì)應(yīng)java中es的API為:
QueryBuilders. wildcardQuery("testWord.keyword", "*測(cè)試數(shù)據(jù)*")
?一般情況下,這個(gè)模糊查詢是沒有問題的,但是當(dāng)testWord的字段過(guò)長(zhǎng)時(shí),會(huì)導(dǎo)致es搜索失效。通過(guò)資料查詢,這個(gè)文本的范圍在256~32766之間,如果是漢字查詢,因?yàn)橐粋€(gè)漢字占2個(gè)字節(jié),還會(huì)在此基礎(chǔ)上除2。
故此,需要在創(chuàng)建索引之時(shí),同時(shí)指定字段的長(zhǎng)度:
http://ip:9200/myindex?include_type_name=true
{
????"mappings":?{
????????"mytype":?{
????????????"properties":?{
????????????????"testWord":?{
????????????????????"type":?"keyword",
????????????????????"ignore_above":?32766
????????????????}
????????????}
????????}
????}
}
其中,mytype為自定義索引類型,默認(rèn)為_doc,ignore_above即為設(shè)置字段長(zhǎng)度的屬性,注意需要?jiǎng)h除索引之后再進(jìn)行此操作。
那么原本存在數(shù)據(jù)的索引該怎么辦?也是直接刪除嗎?我們可以利用es的表復(fù)制,來(lái)完成數(shù)據(jù)保存。
首先建一個(gè)索引:myindexcopy,之后
http://IP:9200/_reindex
{
????"source":{
????????"index":"mytype"
????},
????"dest":{
????????"index":"myindexcopy"
????}
}
完成數(shù)據(jù)備份,之后利用上一個(gè)api重構(gòu)查詢字段屬性即可。
需要注意,在設(shè)置完成以后,java調(diào)用查詢便不需要加keyword關(guān)鍵字:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-448038.html
?QueryBuilders. wildcardQuery("testWord", "*測(cè)試數(shù)據(jù)*")?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-448038.html
到了這里,關(guān)于Elasticsearch 中基于wildcardQuery的模糊查詢失效的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!