elasticsearch - 来自弹性的不一致的搜索结果
问题描述
我有一个包含大约 40.000 个船只名称的索引
当发布对船舶名称的查询时,即“TUC”,我得到了一些结果当将查询词减少到“T”时,我从“TUC”查询中得到的结果不在结果集中?
我有点不知道是什么原因造成的,但想知道它是否因为总结果集太大而被删掉了?
一些统计数据:
询问:
{
"query" : {
"bool" : {
"must" : [
{
"query_string" : {
"fields" : ["vesselName"],
"type" : "phrase_prefix",
"query" : "T"
}
}
]
}
}
结果(第一):
"max_score": 12.450134,
"hits": [
{
"_index": "vesselsindex",
"_type": "_doc",
"_id": "06ad4663-42f6-4771-b350-0d3b7a1b3229",
"_score": 12.450134,
"_source": {
"vesselId": "06ad4663-42f6-4771-b350-0d3b7a1b3229",
"callSign": "FATA",
"vesselName": "TAAPE"
}
},
结果(使用搜索词“TUC”时):
{
"_index": "vesselsindex",
"_type": "_doc",
"_id": "e7bea95c-6819-48b1-b52e-0a8fbaeef1df",
"_score": 11.831188,
"_source": {
"vesselId": "e7bea95c-6819-48b1-b52e-0a8fbaeef1df",
"callSign": "PBAQ",
"vesselName": "TUCANA"
}
},
设置:
{
"vesselsindex": {
"settings": {
"index": {
"number_of_shards": "1",
"provided_name": "vesselsindex",
"max_result_window": "50000",
"creation_date": "1604061335143",
"analysis": {
"analyzer": {
"keywordWithCaseIgnore": {
"filter": [
"lowercase"
],
"type": "custom",
"tokenizer": "keyword"
}
}
},
"number_of_replicas": "1",
"uuid": "M-m3nIB5TqeiPNR2NR5zWQ",
"version": {
"created": "7060099"
}
}
}
}
统计:
{
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_all": {
"primaries": {
"docs": {
"count": 43510,
"deleted": 0
},
"store": {
"size_in_bytes": 12762612
},
解决方案
发生这种情况是因为 ES 默认只返回前 10 个搜索结果,当您搜索时T
,前 10 个文档可能是TUC
查询搜索结果中存在的文档。
如果您想获得更多搜索结果,请增加size 参数,这很昂贵,因此主要用于分页以提高搜索查询的性能。
您可以提供尺寸参数作为查询参数或作为搜索请求正文的一部分。
您可以在搜索请求 URL 中尝试 _search?size=44000,它应该会返回所有搜索结果
推荐阅读
- ios - 登录后如何在 react-native 应用程序中设置启动画面
- visual-studio-2019 - 发布网站不使用转换后的 web.config
- android - keyListener 无法识别输入
- javascript - SublimeREPL 不适用于 Javascript 代码
- if-statement - IF 的参数数量错误
- node.js - mongoose.populate() 返回一个空数组
- python - 在 Keras 上将两个模型的权重加载到一个中
- python-3.x - 如何正确绘制小浮点数
- swift - 单击按钮后如何更改变量 UITextView?
- javascript - 做出反应。如何将 arg 传递给 onClick 调用的函数而不自动触发它