Elasticseach搜索部分文本

时间:2016-04-20 10:39:38

标签: java elasticsearch

我尝试使用以下映射创建索引: createIndexRequestBuilder = client.admin()。indices()。prepareCreate(document.indexName());

         XContentBuilder mappingBuilder = jsonBuilder()
                .startObject()
                    .startObject("my_type")
                        .startObject("properties")
                            .startObject("nombre")
                                .field("type", "string")
                                .field("index", "not_analyzed")
                            .endObject()                                
                            .startObject("codigo")
                                .field("type", "string")
                                .field("index", "not_analyzed")
                            .endObject()                                
                        .endObject()
                    .endObject()
                .endObject();

         createIndexRequestBuilder.addMapping("my_type", mappingBuilder);

然后,如果我尝试以下搜索:

GET /hogan/tipos-documento/_search?pretty
{ 
     "query": {
        "bool": {
            "must": [
               {"wildcard": {
                  "nombre": {
                     "value": "*Type 2*"
                  }
               }}
            ] 
        }
     }
}

没有问题。但是,如果我尝试"价值" :" 类型2 没有结果因为"通配符"区分大小写。

有没有办法对不敏感的案件进行搜索?也许以另一种方式做索引......

简化,我希望实体像:

public class Entity{
    private Long id;
    private String name;
}

并有一个搜索表单,用户可以在其中输入" name"的部分文字。 (大写或小写"进行搜索

提前致谢

1 个答案:

答案 0 :(得分:0)

您的nombre字段不应为index: not_analyzed,而是使用keywordlowercase分析器进行分析。像这样:

{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "keyword_lowercase": {
            "type": "custom",
            "tokenizer": "keyword",
            "filter": [
              "lowercase"
            ]
          }
....

然后,在映射中:

            "nombre": {
              "type": "string",
              "analyzer": "keyword_lowercase"
            }