首先,抱歉我的英语不好,但让我试着解释一下我的问题。
我正在使用elasticsearch java api为托管我的文档的应用程序工作。 一切正常,我能够在数据库中搜索并保存在我的索引上,我可以按字段和很多很酷的东西来计算我的文档,但我还是坚持了一个奇怪的问题。
当我尝试按名称字段搜索我的文档时,某些文档在搜索时不会返回。
让我举个例子:
我的文档看起来像这样(例如):
id:1 名字:书 类型:pdf
id: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"
}
}
}
}
}
}
}
答案 0 :(得分:0)
好吧,经过几个小时的搜索,我解决了我的问题。
为了解决这个问题,我使用了来自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。