首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性搜索匹配查询返回错误的结果和分数

弹性搜索匹配查询返回错误的结果和分数
EN

Stack Overflow用户
提问于 2017-03-01 22:08:33
回答 3查看 939关注 0票数 0

在我的弹性搜索数据库中插入6条记录后,我正在尝试一个弹性搜索示例。

插入的记录是具有Id和text两个属性的简单json

代码语言:javascript
复制
"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"

我正在做如下搜索

代码语言:javascript
复制
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(
                matchQuery("title","Car Damaged"))
                .build();

        FacetedPage<Occurrence> occurrences = myElasticSearchRepository.search(searchQuery); 
        return occurrences; 

我得到了错误的结果,并且顺序错误

代码语言:javascript
复制
"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

代码语言:javascript
复制
"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"

看起来我做了一些根本不正确的事情。

敬请指教。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-04 06:34:58

我在这个例子中使用了嵌入式弹性搜索。在调试了一段时间后,我尝试删除并重新创建索引。

您可以使用http://localhost:9200/_cat/indices?v监控索引。对于所有主要功能--清除缓存、刷新索引等,都有弹性搜索的小抄。

可能我的索引被破坏了。我删除了旧的索引,并以不同的名称重新创建了索引,它的工作与预期的一样。

搜索结果是相关的,并且分数与预期结果相匹配。

票数 0
EN

Stack Overflow用户

发布于 2017-03-02 12:28:14

如果您是Elasticsearch的新手,我建议您尝试使用请求正文搜索,而不是URI搜索。你可以在here上找到它。如果你需要一个查询工具,你可以尝试Sense。

为了让Java客户端库与Elasticsearch here进行交互,因为我在一年前遇到过一个问题,因为Spring data elasticsearch在更新版本以匹配Elasticsearch版本时速度非常慢。

票数 0
EN

Stack Overflow用户

发布于 2017-08-31 22:26:35

如果你有多个分片和少量的数据,那么当你使用默认的搜索类型query_then_fetch时,你可能会得到错误的分数,因为当少量的数据分散在几个分片上时,IDF算法开始产生糟糕的结果。在这种情况下,您很可能正在寻找另一种搜索类型,即dfs_query_then_fetch。应该是这样的

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42533922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档