Java elasticsearch Ngram 0点击率

时间:2016-07-09 10:49:52

标签: java elasticsearch

我正在使用带有Java的elasticsearch,我需要通过只键入3个字符来查找用户名或姓。 我做了正常的搜索,当我输入完整的名字或姓氏时,我会得到答案。 有人告诉我,我应该使用Ngram,但我正在尝试,现在我找不到任何东西。

我的代码:

TransportClient client = TransportClient.builder().build()
            .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

    XContentBuilder settingsBuilder = XContentFactory.jsonBuilder()
            .startObject()
                .startObject("analysis")
                    .startObject("analyzer")
                        .startObject("ngram_analyzer")
                            .field("tokenizer", "ngram_tokenizer")
                        .endObject()
                    .endObject()
                    .startObject("tokenizer")
                        .startObject("ngram_tokenizer")
                            .field("type","nGram")
                            .field("min_gram","3")
                            .field("max_gram","8")
                        .endObject()
                    .endObject()
                .endObject()
            .endObject();

    String json = settingsBuilder.string();

client.admin().indices()
            .prepareCreate("user").setSettings(settingsBuilder).get();

    QueryBuilder qb = multiMatchQuery(
            search,
            "firstname","lastname"
    );
    SearchResponse response = client.prepareSearch("user")
            .setQuery(qb)
            .execute()
            .get();

    System.out.println(response.getHits().getTotalHits()); // 0

我试图使用此解决方案:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-ngram-tokenizer.html;

System.out.println(json)给了我:

    {
  "analysis": {
    "analyzer": {
      "ngram_analyzer": {
        "tokenizer": "ngram_tokenizer"
      }
    },
    "tokenizer": {
      "ngram_tokenizer": {
        "type": "nGram",
        "min_gram": "3",
        "max_gram": "8"
      }
    }
  }
}

所以它应该是正确的,但正如我所说,0次点击。 我试图将设置复制到json文件并加载它,效果是一样的。

我花了一整天的时间,我将非常感谢你的帮助。

0 个答案:

没有答案