看,灰机...

elasticsearch使用附件进行中文检索,无法查询中文的问题。

Elasticsearch | 作者 simplelovecs | 发布于2017年01月10日 | 阅读数:10107


现在有一个功能,有各种类型的文档文件,比如pdf、word等,我要实现对这些文件中的内容进行中文检索。
现使用mapperattachment,来操作。发现检索英文的时候可以,检索中文的时候查找不出结果。
命令如下。
curl -XDELETE 'localhost:9200/test?pretty'
curl -XPUT 'localhost:9200/test?pretty'
curl -XPOST 'localhost:9200/test/_close?pretty'
curl -XPUT 'localhost:9200/test/person/_mapping?pretty' -d'
{
  "person": {
    "properties": {
      "file": {
        "type": "attachment",
        "fields": {
          "content": {
            "language" : "zh_cn",
            "type": "text",
            "analyzer": "ik_max_word",
            "search_analyzer": "ik_max_word",
            "include_in_all": "true",
            "boost": 8,
            "term_vector":"with_positions_offsets",
            "store": true
          }
        }
      }
    }
  }
}'
curl -XPUT 'localhost:9200/test/_settings?pretty' -d'
{
  "index.mapping.attachment.indexed_chars": -1
}'
curl -XPUT 'localhost:9200/test/_settings?pretty' -d'
{
  "index.mapping.attachment.detect_language" : true
}'

curl -XPOST 'localhost:9200/test/_open?pretty'


 
curl -XPUT 'localhost:9200/test/person/10?refresh=true&pretty' -d'
{
  "file": "此处是pdf文件的base64编码,如果附在这里发帖会显示不出来,故略去"
}'




#如下命令检索不到内容,实际此pdf文件中有中字
curl -XGET 'localhost:9200/test/person/_search?pretty' -d'
{
  "query": {
    "match": {
      "file.content": "中"
    }
  },
  "highlight": {
    "fields": {
      "file.content": {
      }
    }
  }
}'
#如下命令能检索到内容,实际此pdf文件中有haha
curl -XGET 'localhost:9200/test/person/_search?pretty' -d'
{
  "query": {
    "match": {
      "file.content": "haha"
    }
  },
  "highlight": {
    "fields": {
      "file.content": {
      }
    }
  }
}'
已邀请:

medcl - 今晚打老虎。

赞同来自:

Hi,Base64编码确定是不是都正确呢,大部分是中文字符编码的问题,如果是乱码的话,中文就自然不正常了

medcl - 今晚打老虎。

赞同来自:

PUT /test/person/10?refresh=true&pretty
{
"file": "QmFzZTY057yW56CB6K+05piOCuOAgOOAgEJhc2U2NOe8lueggeimgeaxguaKijPkuKo45L2N5a2X6IqC77yIMyo4PTI077yJ6L2s5YyW5Li6NOS4qjbkvY3nmoTlrZfoioLvvIg0KjY9MjTvvInvvIzkuYvlkI7lnKg25L2N55qE5YmN6Z2i6KGl5Lik5LiqMO+8jOW9ouaIkDjkvY3kuIDkuKrlrZfoioLnmoTlvaLlvI/jgIIg5aaC5p6c5Ymp5LiL55qE5a2X56ym5LiN6LazM+S4quWtl+iKgu+8jOWImeeUqDDloavlhYXvvIzovpPlh7rlrZfnrKbkvb/nlKgnPSfvvIzlm6DmraTnvJbnoIHlkI7ovpPlh7rnmoTmlofmnKzmnKvlsL7lj6/og73kvJrlh7rnjrAx5oiWMuS4qic9J+OAggoK44CA44CA5Li65LqG5L+d6K+B5omA6L6T5Ye655qE57yW56CB5L2N5Y+v6K+75a2X56ym77yMQmFzZTY05Yi25a6a5LqG5LiA5Liq57yW56CB6KGo77yM5Lul5L6/6L+b6KGM57uf5LiA6L2s5o2i44CC57yW56CB6KGo55qE5aSn5bCP5Li6Ml42PTY077yM6L+Z5Lmf5pivQmFzZTY05ZCN56ew55qE55Sx5p2l44CC"
}


GET /test/person/_search?pretty
{
"query": {
"match": {
"file.content": "编码"
}
},
"highlight": {
"fields": {
"file.content": {
}
}
}
}
返回
{
"took": 6,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 4.122839,
"hits": [
{
"_index": "test",
"_type": "person",
"_id": "10",
"_score": 4.122839,
"_source": {
"file": "QmFzZTY057yW56CB6K+05piOCuOAgOOAgEJhc2U2NOe8lueggeimgeaxguaKijPkuKo45L2N5a2X6IqC77yIMyo4PTI077yJ6L2s5YyW5Li6NOS4qjbkvY3nmoTlrZfoioLvvIg0KjY9MjTvvInvvIzkuYvlkI7lnKg25L2N55qE5YmN6Z2i6KGl5Lik5LiqMO+8jOW9ouaIkDjkvY3kuIDkuKrlrZfoioLnmoTlvaLlvI/jgIIg5aaC5p6c5Ymp5LiL55qE5a2X56ym5LiN6LazM+S4quWtl+iKgu+8jOWImeeUqDDloavlhYXvvIzovpPlh7rlrZfnrKbkvb/nlKgnPSfvvIzlm6DmraTnvJbnoIHlkI7ovpPlh7rnmoTmlofmnKzmnKvlsL7lj6/og73kvJrlh7rnjrAx5oiWMuS4qic9J+OAggoK44CA44CA5Li65LqG5L+d6K+B5omA6L6T5Ye655qE57yW56CB5L2N5Y+v6K+75a2X56ym77yMQmFzZTY05Yi25a6a5LqG5LiA5Liq57yW56CB6KGo77yM5Lul5L6/6L+b6KGM57uf5LiA6L2s5o2i44CC57yW56CB6KGo55qE5aSn5bCP5Li6Ml42PTY077yM6L+Z5Lmf5pivQmFzZTY05ZCN56ew55qE55Sx5p2l44CC"
},
"highlight": {
"file.content": [
"Base64<em>编码</em>说明\n  Base64<em>编码</em>要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0",
"如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此<em>编码</em>后输出的文本末尾可能会出现1或2个'='。\n\n  为了保证所输出的<em>编码</em>位可读字符,Base64制定了一个<em>编码</em>表,以便进行统一转换。<em>编码</em>表的大小为2^6=64,这也是Base64名称的由来。"
]
}
}
]
}
}

要回复问题请先登录注册