# .txt文件不能被搜索

**URL:** <https://discuss.elastic.co/t/txt/61451>\
**Category:** 中文提问与讨论\
**Created:** [September 25, 2016, 12:40am UTC](https://discuss.elastic.co/t/txt/61451 "2016-09-25T00:40:28Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![zikezi](https://avatars.discourse-cdn.com/v4/letter/z/839c29/32.png) [@zikezi](https://discuss.elastic.co/u/zikezi)\
**Post date:** [September 25, 2016, 12:40am UTC](https://discuss.elastic.co/t/txt/61451/1 "2016-09-25T00:40:28Z")

</div>

大家好，我目前使用的是elastic2.1.2,mapper-attachments3.1.2, java1.7 64bit.所有的配置均是默认的配置，没做任何改变。目前遇到一个问题，在上传附件为.txt时，不能根据txt里的内容进行搜索，但是ms office 却可以。下面是我的索建索引相关信息：  
1\> mapping

> `{  
> "mappings": {  
> "lesson": {  
> "properties": {  
> "sysOrganizationSid": {  
> "type": "long"  
> },  
> "atts": {  
> "properties": {  
> "file": {  
> "type": "attachment",  
> "fields": {  
> "content": {  
> "type": "string"  
> },  
> "author": {  
> "type": "string"  
> },  
> "title": {  
> "type": "string"  
> },  
> "keywords": {  
> "type": "string"  
> },  
> "name": {  
> "type": "string"  
> },  
> "language": {  
> "type": "string"  
> },  
> "content\_length": {  
> "type": "integer"  
> },  
> "date": {  
> "format": "strict\_date\_optional\_time||epoch\_millis",  
> "type": "date"  
> },  
> "content\_type": {  
> "type": "string"  
> }  
> }  
> },  
> "name": {  
> "type": "string"  
> },  
> "cname": {  
> "type": "string"  
> }  
> }  
> }  
> }  
> }  
> }  
> }

2\>建立索引

- java 构建base64d代码

> `public static String file2Base64(String path) throws Exception { File file = new File(path);; FileInputStream inputFile = new FileInputStream(file); byte[] buffer = new byte[(int) file.length()]; inputFile.read(buffer); inputFile.close(); return new BASE64Encoder().encode(buffer); }`

- 最终索引数据为：

> {  
> "\_index": "xyinfo",  
> "\_type": "lesson",  
> "\_id": "1030",  
> "\_version": 1,  
> "\_score": 1,  
> "\_source": {  
> "platOrganizationSid": 1001,  
> "atts": [  
> {  
> "cname": "新建文本文档 (3).txt",  
> "file": "1NrJz9K7xqq52NPaTHVjZW5ltcSyqb/N1tCjrL3pydzBy0x1Y2VuZbXEyOvDxdLUvLDW0M7EzsS8 /rXEy9HL987KzOK94r72o6zG5NbQyrnTw7XEwP3X08rH0tTOxLG+zsS8/tf3zqrL0cv3tcTOxLW1 o6zU2rS0vajL99L9yrHKudPDwctSZWFkZXK2wcihzsS8/qGjtavKx9TayrW8yrXE06bTw7n9s8zW 0KOsvq2zo9Do0qq21Lj31ta499H5tcS3x87Esb7OxLz+tcTE2sjdvfjQ0MirzsTL0cv3oaPO0sPH s6PTw7XEs/3By3R4dKGiaHRtbKGieG1stcjOxLG+uPHKvbXEzsS1tc3io6y7udPQtPPBv7XEwP3I 53BkZqGid29yZKGicHB0tci3x87Esb648cq9tcTOxLW1o6zU2rbU1eLQqc7EtbXW0LXExNrI3b34 0NDL0cv3yrGjrL7N0OjSqs/Is+nIocbkxNrI3aOsyLu689TZuPq9+MbkxNrI3bS0vajL99L9o6yy xcTcsbvV/ci3y9HL96GjQXBhY2hlIFRpa2Egvs3Kx9K7v+7Hv7TztcTOxLW1xNrI3bPpyKG/8rzc o6zL/Lyvs8nBy7j31tbOxLW1veLO9sb3o6zE3Lm7yrax8LTztuDK/bXEzsS1taOssqLH0sTcubvA qdW5xuTL+7XEveLO9sb3o6y2+MfSttTW0M7EtcTKtrHw0rK9z7rDoaO+rbn9srvN6sirsuLK1KOs xNy5u8q2sfC1xM7EtbW48cq9yOfPwqO6DQpwZGbOxLW1DQpkb2OhomRvY3ihonBwdKGiZXhjZWwN CnR4dKGiaHRtbKGieG1sDQp6aXChonRhcg0K0tTJzzTA4M7EtbW7+bG+yc+w/LqswcvO0sPH1Nq0 tL2o0ru49tfKwc+/4sqxy/nKudPDtcTOxLW1uPHKvaGj"  
> }  
> ]  
> }  
> }

3\>查询

> POST [http://127.0.0.1:9200/xyinfo/lesson/\_search](http://127.0.0.1:9200/xyinfo/lesson/_search)  
> {  
> "query": {  
> "match": {  
> "atts.file.content": "博客"  
> }  
> }  
> }

txt里的内容为：

> 在上一篇关于Lucene的博客中，介绍了Lucene的入门以及中文文件的搜索问题解决，其中使用的例子是以文本文件作为搜索的文档，在创建索引时使用了Reader读取文件。但是在实际的应用过程中，经常需要对各种各样的非文本文件的内容进行全文搜索。我们常用的除了txt、html、xml等文本格式的文档外，还有大量的例如pdf、word、ppt等非文本格式的文档，在对这些文档中的内容进行搜索时，就需要先抽取其内容，然后再跟进其内容创建索引，才能被正确搜索。Apache Tika 就是一款强大的文档内容抽取框架，它集成了各种文档解析器，能够识别大多数的文档，并且能够扩展其他的解析器，而且对中文的识别也较好。经过不完全测试，能够识别的文档格式如下：  
> pdf文档  
> doc、docx、ppt、excel  
> txt、html、xml  
> zip、tar  
> 以上4类文档基本上包含了我们在创建一个资料库时所使用的文档格式。

最终结果为：  
 ![](https://us1.discourse-cdn.com/elastic/original/2X/3/34a440c1f800e006c9877a26cf9e83e75b35ffa9.png)

---

<div class="post-metadata">

**Author:** ![Wilson](https://avatars.discourse-cdn.com/v4/letter/w/96bed5/32.png) [@Wilson](https://discuss.elastic.co/u/Wilson)\
**Post date:** [December 30, 2016, 3:18pm UTC](https://discuss.elastic.co/t/txt/61451/2 "2016-12-30T15:18:44Z")

</div>

和你一样的结果，office文档也查不到

---

<div class="post-metadata">

**Author:** ![medcl.net](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/medcl.net/32/4414_2.png) [@medcl.net](https://discuss.elastic.co/u/medcl.net)\
**Post date:** [January 13, 2017, 8:57am UTC](https://discuss.elastic.co/t/txt/61451/3 "2017-01-13T08:57:54Z")

</div>

Hi, 你可以看看你的 base64的结果，你会发现 base64的内容还原之后是乱码，问题在你读文件的时候，没有指定编码，所有文件读到了乱码，后面的查询自然也就查不出来了。  
看一下你的文件编码是多少，如果是 GBK，可以修改如下：  
InputStreamReader reader = new InputStreamReader(fis,"GBK");

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2017, 1:44pm UTC](https://discuss.elastic.co/t/txt/61451/4 "2017-07-06T13:44:08Z")

</div>


