Java分隔、合并大文件

今天网百度网盘上上传文件提示单个文件大小超限,让我升级VIP。作为一个有逼格的程序猿怎么可能被这点小事难倒呢。 import com.google.common.collect.Lists; import org.apache.commons.io.FilenameUtils; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.util.List; /** * @author Gao Youbo * @since 2017-07-07 18:18 */ public class Files { public static void mai...

继续阅读 »

[Elasticsearch] 多字段搜索 (六) - 自定义_all字段,跨域查询及精确值字段

自定义_all字段 在元数据:_all字段中,我们解释了特殊的_all字段会将其它所有字段中的值作为一个大字符串进行索引。尽管将所有字段的值作为一个字段进行索引并不是非常灵活。如果有一个自定义的_all字段用来索引人名,另外一个自定义的_all字段用来索引地址就更好了。 ES通过字段映射中的copy_to参数向我们提供了这一功能: PUT /my_index { "mappings": { "person": { "properties": { "first_name": { "type": "string", "copy_t...

继续阅读 »

[Elasticsearch] 多字段搜索 (五) - 以字段为中心的查询

以字段为中心的查询(Field-centric Queries) 上述提到的三个问题都来源于most_fields是以字段为中心(Field-centric),而不是以词条为中心(Term-centric):它会查询最多匹配的字段(Most matching fields),而我们真正感兴趣的最匹配的词条(Most matching terms)。 NOTEbest_fields同样是以字段为中心的,因此它也存在相似的问题。 首先我们来看看为什么存在这些问题,以及如何解决它们。 问题1:在多个字段中匹配相同的单词 考虑一下most_fields查询是如何执行的:ES会为每个字段生成一个match查询,让后将它们包含在一个bool查询中。 我们可以将查询传入到validate-query AP...

继续阅读 »

[Elasticsearch] 多字段搜索 (四) - 跨字段实体搜索

跨字段实体搜索(Cross-fields Entity Search) 现在让我们看看一个常见的模式:跨字段实体搜索。类似person,product或者address这样的实体,它们的信息会分散到多个字段中。我们或许有一个person实体被索引如下: { "firstname": "Peter", "lastname": "Smith" } 而address实体则是像下面这样: { "street": "5 Poland Street", "city": "London", "country": "United Kingdom", "postcode": "W1V 3DG" } 这个例子也许很像在多查询字符串中描述的,但是...

继续阅读 »

[Elasticsearch] 多字段搜索 (三) - multi_match查询和多数字段

multi_match查询 multi_match查询提供了一个简便的方法用来对多个字段执行相同的查询。 NOTE 存在几种类型的multi_match查询,其中的3种正好和在"了解你的数据"一节中提到的几种类型相同:best_fields,most_fields以及cross_fields。 默认情况下,该查询以best_fields类型执行,它会为每个字段生成一个match查询,然后将这些查询包含在一个dis_max查询中。下面的dis_max查询: { "dis_max": { "queries": [ { "match": { "title": { "query": "Quick brown fox...

继续阅读 »

[Elasticsearch] 多字段搜索 (二) - 最佳字段查询及其调优

最佳字段(Best Fields) 假设我们有一个让用户搜索博客文章的网站,就像这两份文档一样: PUT /my_index/my_type/1 { "title": "Quick brown rabbits", "body": "Brown rabbits are commonly seen." } PUT /my_index/my_type/2 { "title": "Keeping pets healthy", "body": "My quick brown fox eats rabbits on a regular basis." } 用户输入了"Brown fox",然后按下了搜索键。我们无法预先知道用户搜索的词条会出现在博文的title或者b...

继续阅读 »

[Elasticsearch] 多字段搜索 (一) - 多个及单个查询字符串

多字段搜索(Multifield Search) 本文翻译自官方指南的Multifield Search一章。 查询很少是只拥有一个match查询子句的查询。我们经常需要对一个或者多个字段使用相同或者不同的查询字符串进行搜索,这意味着我们需要将多个查询子句和它们得到的相关度分值以一种有意义的方式进行合并。 也许我们正在寻找一本名为战争与和平的书,它的作者是Leo Tolstoy。也许我们正在使用“最少应该匹配(Minimum Should Match)”来搜索ES中的文档。另外我们也可能会寻找拥有名为John而姓为Smith的用户。 在本章中我们会讨论一些构建多字段搜索的工具,以及如何根据你的实际情况来决定使用哪种方案。 多个查询字符串(Multiple Query Strings) 处理字...

继续阅读 »

Java解析搜索词库

解析算法摘自:http://qindongliang.iteye.com/blog/2088416 最近在优化社区搜索结果,之前使用的词库比较老旧很多次都收录不全,所以想到了搜狗输入法词库。但是搜索输入法词库文件是加密之后的,去网上找了一个Java版的解析程序,经测试可用,这里搜藏一下。 package cn.mucang.saturn.common; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.file.Files; import java.nio.file.LinkOption; import java.nio.file.Paths; ...

继续阅读 »

生成不重复随机数

生成一组不重复随机数需求在很多场景下都会用到,实现方式也有很多种,我这里提供一种实现方式。我的方法是利用Set无法插入重复对象的特性来完成。实现方式如下。 private static Random random = new Random(); /** * @param size 生成数量 * @param bound 随机范围 * @return */ private static Set getRandomIndex(int size, int bound) { if (size < 1 && size > bound) { return Sets.newLinkedHashSet(); } Set s...

继续阅读 »

看看这段代码应该输出什么

import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * @author Gao Youbo * @since 2016-06-02 10:32 */ public class Test { private static ExecutorService es = Executors.newFixedThreadPool(10); private static Action action = new Action(); public static void main(String[] args) { ...

继续阅读 »

Java中的阻塞队列

1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。 阻塞队列提供了四种处理方法: 方法\处理方式 抛出异常 返回特殊值 一直阻塞 超时退出 插入方法 add(e) offer(e) put(e) offer(e,time,unit) 移除方法 remove() poll() take() poll(time,unit) 检查方法 element() peek() 不可用 不可用 抛出异...

继续阅读 »

Java xml解析器BUG

今日发现一个BUG,之前调用很好的webservice借口,突然无法调用了并且报错,错入日志如下: com.sun.xml.internal.ws.streaming.XMLReaderException: Unable to create StAX reader or writer at com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory$Default.doCreate(XMLStreamReaderFactory.java:359) ~[na:1.7.0_45] at com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory.create(XML...

继续阅读 »

Java多线程下载

package cn.mucang.chat.common.download; import com.google.common.collect.Lists; import org.apache.commons.lang3.math.NumberUtils; import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpHead; import org.apache.http.impl.client.HttpClientBuilder;...

继续阅读 »

Java四舍五入

package cn.mucang.jiakao.common.utils; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Random; /** * @author Gao Youbo * @since 2014-08-28 13:55:12 */ public class NumberUtils { /** * 四舍五入取整数 * * @param n * @return */ public static int roundHa...

继续阅读 »

Java生成WebService客户端代码

wsimport -keep -p com.demo.client http://c.360doo.com/Handler/PingAnCxService.asmx?WSDL 命令参数说明: -d:生成客户端执行类的class文件的存放目录 -s:生成客户端执行类的源文件的存放目录 -p:定义生成类的包名 其他命令参数请参照:http://download-llnw.oracle.com/javase/6/docs/technotes/tools/share/wsimport.html

继续阅读 »