开发语言:JAVA
解决问题:ES 5.2.1默认使用的 standard 分词器,该分词器是单个汉字进行分词的,而需求使用二元分词,故使用ngram 实现二元分词
通过mapping 将分词器 与要分词的字段进行映射
示例代码:
// DoubleAnalyzer 为自定义的fe
/** * 创建一个索引 * @param indexName 索引名 */
public static void createIndex2(TransportClient client, String indexName) {
try {
/*
OpenIndexResponse indexOpen = client.admin().indices().prepareOpen(indexName).get();
if (indexOpen.isAcknowledged())
{
System.out.println("open " + indexOpen.isAcknowledged()); // true表示创建成功
client.admin().indices().prepareClose(indexName);
}
*/
{
try {
XContentBuilder settingsBuilder = XContentFactory.jsonBuilder()
.startObject()
.startObject("analysis")
.startObject("analyzer")
.startObject("DoubleAnalyzer")
.field("tokenizer", "my_ngram_tokenizer")
.endObject()
.endObject()
.startObject("tokenizer")
.startObject("my_ngram_tokenizer")
.field("type", "ngram")
.field("min_gram", 2)
.field("max_gram", 2)
.field("token_chars", "letter, digit")