java API 的字符串查询没有按名称找到某些文档
String Query for java API dosen’t find some documents by name
首先,抱歉我的英语不好,但让我试着解释一下我的问题。
我正在使用 elasticsearch java api 来管理我的文档。
一切正常,我可以在数据库中搜索并保存在我的索引中,我可以按字段和很多很酷的东西来计算我的文档聚合,但我遇到了一个奇怪的问题。
当我尝试按名为名称的字段搜索我的文档时,有些文档 return 无法搜索。
举个例子:
我的文档是这样的(仅举个例子):
编号:1
名称:书
类型:pdf
编号:2
名称:我的搜索服务测试
类型:zip
当我尝试搜索时,如果我按名称搜索,将值 "book" 作为参数发送,它工作正常,但是当我尝试搜索时,发送我的参数值 "service",结果为空。
这是我的搜索代码:
SearchRequestBuilder src1 = client.prepareSearch().setQuery(QueryBuilders.queryStringQuery(parameter).field("name"));
谁知道,为什么此搜索在 ID 为 2 的文档的名称字段中找不到我的参数值 "service"?
谢谢!
附加信息:
我的总索引信息:
{
"template": "*",
"settings": {
"index.refresh_interval": "5s"
},
"mappings": {
"_default_": {
"_all": {
"enabled": true
},
"dynamic_templates": [
{
"string_fields": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"index": "not_analyzed",
"omit_norms": true,
"type": "string"
}
}
}
],
"properties": {
"@version": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
}
好吧,找了好几个小时,我解决了我的问题。
为了解决这个问题,我使用了来自 elasticsearch java api 的通配符查询,现在我可以在我的字段中搜索字符串参数。
代码如下:
SearchRequestBuilder srch1 = client.prepareSearch()
.setIndices("index_name")
.setTypes("type_name")
.setSearchType(SearchType.DFS_QUERY_AND_FETCH)
.setQuery(QueryBuilders.wildcardQuery("field_name", "*"+string_parameter+"*"));
构建完 SearchRequestBuilder 后,只需将其添加到 MultipleSearchResponse 或 SearchResponse 中:
MultiSearchResponse sr = client.prepareMultiSearch()
.add(srch1)
.add(srch2)
.add(srch3)
.execute().actionGet();
在我的例子中,我有 3 个不同的查询,所以我使用了 MultipleSearchResponse。
首先,抱歉我的英语不好,但让我试着解释一下我的问题。
我正在使用 elasticsearch java api 来管理我的文档。 一切正常,我可以在数据库中搜索并保存在我的索引中,我可以按字段和很多很酷的东西来计算我的文档聚合,但我遇到了一个奇怪的问题。
当我尝试按名为名称的字段搜索我的文档时,有些文档 return 无法搜索。
举个例子:
我的文档是这样的(仅举个例子):
编号:1 名称:书 类型:pdf
编号:2 名称:我的搜索服务测试 类型:zip
当我尝试搜索时,如果我按名称搜索,将值 "book" 作为参数发送,它工作正常,但是当我尝试搜索时,发送我的参数值 "service",结果为空。
这是我的搜索代码:
SearchRequestBuilder src1 = client.prepareSearch().setQuery(QueryBuilders.queryStringQuery(parameter).field("name"));
谁知道,为什么此搜索在 ID 为 2 的文档的名称字段中找不到我的参数值 "service"?
谢谢!
附加信息:
我的总索引信息:
{
"template": "*",
"settings": {
"index.refresh_interval": "5s"
},
"mappings": {
"_default_": {
"_all": {
"enabled": true
},
"dynamic_templates": [
{
"string_fields": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"index": "not_analyzed",
"omit_norms": true,
"type": "string"
}
}
}
],
"properties": {
"@version": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
}
好吧,找了好几个小时,我解决了我的问题。
为了解决这个问题,我使用了来自 elasticsearch java api 的通配符查询,现在我可以在我的字段中搜索字符串参数。
代码如下:
SearchRequestBuilder srch1 = client.prepareSearch()
.setIndices("index_name")
.setTypes("type_name")
.setSearchType(SearchType.DFS_QUERY_AND_FETCH)
.setQuery(QueryBuilders.wildcardQuery("field_name", "*"+string_parameter+"*"));
构建完 SearchRequestBuilder 后,只需将其添加到 MultipleSearchResponse 或 SearchResponse 中:
MultiSearchResponse sr = client.prepareMultiSearch()
.add(srch1)
.add(srch2)
.add(srch3)
.execute().actionGet();
在我的例子中,我有 3 个不同的查询,所以我使用了 MultipleSearchResponse。