gpt4 book ai didi

c# - 从数据库中重新选择后保持 Lucene 顺序,取决于 Lucene 结果

转载 作者:太空宇宙 更新时间:2023-11-03 23:21:10 25 4
gpt4 key购买 nike

我在我的项目中使用 Lucene(和 LINQ)从 Product 表中进行选择。这就是我为 Lucene 索引字段的方式:

        var document = new Document();

document.Add(new Field("ID", HeaderSearchModel.ID.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
document.Add(new Field("Summary", HeaderSearchModel.Summary, Field.Store.YES, Field.Index.NOT_ANALYZED));
document.Add(new Field("Picture", HeaderSearchModel.Picture, Field.Store.YES, Field.Index.NOT_ANALYZED));

var title = new Field("Title", HeaderSearchModel.Title, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS);
title.Boost = 3;
document.Add(title);
document.Add(new Field("Description", HeaderSearchModel.Description.RemoveHtmlTags(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));

搜索将在 TitleDescription 字段上,我显示结果的解决方案是:

首先,我使用 Lucene 按 Term(用户请求的)进行搜索,结果将是一个 ID 列表,然后我使用此列表来查询表单 DB,并获取我需要向用户显示的产品字段

问题是,在这种情况下,我丢失了Lucene 的顺序 并且结果与Lucene 的算法 不匹配。

我该如何解决这个问题?

请注意:在 Lucene 上没有错误或失败,一切正常,但结果的顺序不同。

更新

使用 Lucene 的搜索结果是找到的 ID 列表

foreach (var item in LUCENE_RESULT)
{
ids.Add(item.ID);
}

然后我使用 LINQ,像这样:

var query = db.Products.Where(c => ids.Contains(c.ID))....

并获取用于显示结果的字段,我没有在 LINQ 中使用 OrderBy

最佳答案

您可以通过 linq 将您的查询结果连接到您的 ids 集合来获取原始订单:

var orderedResult = from i in ids
join a in query on i equals a.ID
select a;

领先的集合(在您的例子中是“ids”)将是排序顺序的主人。

关于c# - 从数据库中重新选择后保持 Lucene 顺序,取决于 Lucene 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35391123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com