我正在使用ElasticSearch Java API进行搜索。我有四个 Realm :

  • 名称
  • DOB
  • 地址

  • 在搜索时,我使用以下查询:

    QueryBuilder qb = QueryBuilders.queryString(“Pritish”);

    这包括搜索时的键。另外,我不想选择以下字段:

    .fields(“DOB”,“名称”,“地址”)

    有什么办法可以排除字段?我一直在寻找ParitalFields。这对我的情况有用吗?有人可以为此提供Java示例吗?

    现在,我添加了如下映射:

    / ***************************** 创建索引 *************** *************** /
    XContentBuilder mapping = jsonBuilder()
    
        .startObject()
            .startObject(indexName)
                .startObject("properties")
                    .startObject("key")
                        .field("type", "string")
                        .field("index","not_analyzed")
                        .field("store", "false")
                    .endObject()
                    .startObject("addr1")
                        .field("type","string")
                    .endObject()
                    .startObject("DOB")
                        .field("type","string")
                    .endObject()
                    .startObject("name")
                        .field("type","string")
                    .endObject()
                .endObject()
            .endObject()
        .endObject();
    
    client.admin()
            .indices()
            .preparePutMapping(indexName)
            .setType(indexName)
            .setSource(mapping)
            .execute()
            .actionGet();
    

    / ********************** 插入数据 ********************** ******* /
        XContentBuilder x = jsonBuilder()
    
            .startObject()
                .field("key", key)
                .field("addr1", "abc road")
                .field("DOB", "09092009")
                .field("name","test")
    
        .endObject();
    bulk.add(client.prepareIndex(indexName, indexName).setSource(x));
    

    / ************* 搜索查询 ********************** /
    QueryBuilder qb =QueryBuilders.queryString("*e434*");
    
    SearchResponse response = client.prepareSearch(indexName)
    
        .setQuery(qb)
        .setFrom(0)
        .setSize(100)
        .execute()
        .actionGet();
    
    SearchHit[] results = response.getHits().hits();
    

    当我看到索引元数据时,它向我显示了正确的映射,如下所示:
    mappings: {
       indexName: {
         properties: {
         addr1: {
             type: string
         }
         name: {
             type: string
         }
         key: {
             index: not_analyzed
             type: string
         }
         acct_type: {
             type: string
         }
      }
    }
    }
    

    现在,当我执行搜索查询时,它仍然向我显示对关键字进行搜索的结果。

    我不确定出了什么问题。有人可以帮忙解决这个问题吗?

    最佳答案

    彻底阅读映射文档后,我终于在创建映射时发现了我的错误。我正在按如下方式创建键的映射(请参阅“问题”中的代码):

    字段(“索引”,“未进行分析”)

    阅读文档后,我将上面的行更改如下:

    字段(“索引”,“否”)

    我真的很感谢CodeSculptor的想法。现在,它正在按照我的要求工作。

    非常感谢。

    关于elasticsearch - Elasticsearch在搜索时排除一个字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23165076/

    10-11 06:25
    查看更多