我在弹性搜索数据库中插入6条记录后尝试了一个弹性搜索示例。
插入的记录是简单的json,有两个属性Id和text
"OCC-001","Car Damaged During Loading"
"OCC-002","Car jango jango jango Damaged Loading"
"OCC-003","hjjkhjkasd hjkhjklhas d Cars asdasd jango asdsas jango jango Damaged asdsad asdasdasd Loading"
"OCC-004","This should not come at all "
"OCC-005","This may come Car"
"OCC-006","Will this come Cars"
我正在进行如下搜索
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(
matchQuery("title","Car Damaged"))
.build();
FacetedPage<Occurrence> occurrences = myElasticSearchRepository.search(searchQuery);
return occurrences;
我收到的结果不正确,订单错误
"OCC-005","This may come Car"
"OCC-001","Car Damaged During Loading"
"OCC-002","Car jango jango jango Damaged Loading"
当我使用以下查询进行相同的搜索时,我得到了正确的结果,但是 以不同的顺序
http://localhost:9200/myIndex/cars/_search?q=Car%20Damaged
"OCC-001","Car Damaged During Loading"
"OCC-002","Car jango jango jango Damaged Loading"
"OCC-005","This may come Car"
"OCC-003","hjjkhjkasd hjkhjklhas d Cars asdasd jango asdsas jango jango Damaged asdsad asdasdasd Loading"
看起来我有些根本不正确。
请告知。
答案 0 :(得分:1)
如果您是Elasticsearch的新手,我建议您尝试使用Request Body Search而不是URI搜索。你可以找到它here。如果您需要查询工具,可以尝试Sense。
让Java客户端库与Elasticsearch here进行交互,因为我在1年前遇到了一个问题,因为Spring数据弹性搜索在更新版本中速度很慢,与Elasticsearch版本相匹配。
答案 1 :(得分:0)
我在这个例子中使用了嵌入式弹性搜索。 调试一段时间后,我试图删除并重新创建索引。
您可以使用http://localhost:9200/_cat/indices?v监控索引。 有一个用于弹性搜索所有主要功能的备忘单 - 清除缓存,刷新索引等。
可能我的索引已损坏。我删除了旧索引,并以不同的名称重新创建索引,并按预期工作。
搜索结果是相关的,分数与预期结果相符。
答案 2 :(得分:0)
如果您有多个分片和少量数据,那么在使用query_then_fetch的默认搜索类型时可能会得到错误的分数,因为当少量数据散布在多个分片上时,IDF算法开始产生错误结果。 最有可能在这种情况下,您正在寻找另一种搜索类型,即dfs_query_then_fetch。 它会是这样的
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(matchQuery("title","Car Damaged"))
.withSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.build();
有关搜索类型及其重要性的其他信息,请访问https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-search-type.html#search-request-search-type