我正在使用ES 2.2

我在通过Java API创建搜索时遇到问题。在我的索引中,有以下文件:

public class PersonDocument {

    private String uuid;
    private String name;
    private String type;

    //setters getters
}

问题在搜索-我想搜索所有具有匹配类型的人。我的Java查询:
SearchResponse searchResponse = client
    .prepareSearch("person")
    .setTypes("person")
    .setQuery(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("type", type)))
    .execute()
    .actionGet();

我的某些文档的类型中,值中包含点。但是,当我尝试使用type = grand.parent搜索时,查询返回的对象中type仅是parentgrand

经过一番尝试后,我添加了.operator(Operator.AND),它返回了两个单词的文档。但是它仍然不是正确的解决方案,因为它将返回类型为parent.grand的文档。

如何解决这个问题呢?

编辑:

这是curl -XGET'localhost:9200 / person / _mapping /?pretty'的映射
{
  "person" : {
    "mappings" : {
      "person" : {
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string"
          },
          "uuid" : {
            "type" : "string"
          }
        }
      }
    }
  }
}

最佳答案

您的字段类型是text,它将被分析为grandparent。根据您的用例,您可以将参数类型设置为关键字,或者如果要进行全文本搜索,则应定义自定义标记化器,该标记化器可以对空间进行标记化。
索引为mappingsettings很好。

07-24 09:49