我正在使用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
仅是parent
或grand
。经过一番尝试后,我添加了
.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,它将被分析为grand
和parent
。根据您的用例,您可以将参数类型设置为关键字,或者如果要进行全文本搜索,则应定义自定义标记化器,该标记化器可以对空间进行标记化。
索引为mapping
和settings
很好。