我跟随this tutorial在我的python flask应用程序中包含elasticsearch,这与本教程相对无关。
我在windows pc上运行elasticsearch-8.9.2。我的应用程序正在使用MySQL数据库运行Flask(本地)
当我将数据库内容(新闻片段)摄入elasticsearch并在应用程序中显示我的搜索查询时,我意识到我的elasticsearch索引中有几个重复(并意识到它们在我的数据库中是重复的)。1000个条目出现了四次,导致4000个条目。因此,我的搜索,这应该给我给予6个结果给了我24个结果。
我删除了我的数据库的内容和elasticsearch上的索引:
with app.app_context():
app.elasticsearch.indices.delete(index='news')
在清理我的数据库并验证它现在包含1000个新闻片段之后,我使用给定的classmethod将数据库中的所有内容添加到elasticsearch的索引中:
@classmethod
def reindex(cls):
for obj in cls.query:
add_to_index(cls.__tablename__, obj)
然而,虽然下面的搜索现在将返回的id元素列表限制为我正在寻找的内容,但从搜索结果中获得的结果总数从24个增加到30个。我希望此数字是未删除的结果总数。以下是教程中的查询
def query_index(index, query, page, per_page):
if not current_app.elasticsearch:
return [], 0
search = current_app.elasticsearch.search(
index=index,
body={'query': {'multi_match': {'query': query, 'fields': ['*']}},
'from': (page - 1) * per_page, 'size': per_page})
ids = [int(hit['_id']) for hit in search['hits']['hits']]
return ids, search['hits']['total']['value']
我发现elasticsearch中删除的项目并没有被清除,但仍然存在,并被标记为“已删除”。因此,我试图刷新指数:app.elasticsearch.indices.refresh(index='news')
我已经重新启动了elasticsearch来强制刷新。
1条答案
按热度按时间gv8xihay1#
它返回响应中实际未删除结果的数量。被删除的结果被计算的唯一地方是索引统计信息,即使在那里,当你删除索引时,你实际上删除了所有记录,包括被删除的记录,所以它们不应该显示在那里。
我认为你有一个错误的假设,问题在别的地方。您应该更仔细地查看返回的结果,以弄清楚为什么您的应用从数据库中添加这些记录。我会先在reindex操作中添加一个计数器来检查你运行了多少次,有多少记录被添加,以及这个过程是否正确处理了记录id。