首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Lucene.Net:如何在搜索结果中添加日期筛选器?

Lucene.Net:如何在搜索结果中添加日期筛选器?
EN

Stack Overflow用户
提问于 2010-12-30 10:44:51
回答 2查看 8K关注 0票数 7

我已经让我的搜索器工作得很好,但是它确实会返回过时的结果。我的网站很像NerdDinner,过去的事情就变得无关紧要了。

我现在是这样索引的

注意:我的例子在VB.NET中,但我不在乎是否用C#给出示例

代码语言:javascript
运行
AI代码解释
复制
    Public Function AddIndex(ByVal searchableEvent As [Event]) As Boolean Implements ILuceneService.AddIndex

        Dim writer As New IndexWriter(luceneDirectory, New StandardAnalyzer(), False)

        Dim doc As Document = New Document

        doc.Add(New Field("id", searchableEvent.ID, Field.Store.YES, Field.Index.UN_TOKENIZED))
        doc.Add(New Field("fullText", FullTextBuilder(searchableEvent), Field.Store.YES, Field.Index.TOKENIZED))
        doc.Add(New Field("user", If(searchableEvent.User.UserName = Nothing,
                                     "User" & searchableEvent.User.ID,
                                     searchableEvent.User.UserName),
                                 Field.Store.YES,
                                 Field.Index.TOKENIZED))
        doc.Add(New Field("title", searchableEvent.Title, Field.Store.YES, Field.Index.TOKENIZED))
        doc.Add(New Field("location", searchableEvent.Location.Name, Field.Store.YES, Field.Index.TOKENIZED))
        doc.Add(New Field("date", searchableEvent.EventDate, Field.Store.YES, Field.Index.UN_TOKENIZED))

        writer.AddDocument(doc)

        writer.Optimize()
        writer.Close()
        Return True

    End Function

注意我是如何有一个存储事件日期的“日期”索引的。

我的搜索结果是这样的

代码语言:javascript
运行
AI代码解释
复制
''# code omitted
        Dim reader As IndexReader = IndexReader.Open(luceneDirectory)
        Dim searcher As IndexSearcher = New IndexSearcher(reader)
        Dim parser As QueryParser = New QueryParser("fullText", New StandardAnalyzer())
        Dim query As Query = parser.Parse(q.ToLower)

        ''# We're using 10,000 as the maximum number of results to return
        ''# because I have a feeling that we'll never reach that full amount
        ''# anyways.  And if we do, who in their right mind is going to page
        ''# through all of the results?
        Dim topDocs As TopDocs = searcher.Search(query, Nothing, 10000)
        Dim doc As Document = Nothing

        ''# loop through the topDocs and grab the appropriate 10 results based
        ''# on the submitted page number
        While i <= last AndAlso i < topDocs.totalHits
                doc = searcher.Doc(topDocs.scoreDocs(i).doc)
                IDList.Add(doc.[Get]("id"))
                i += 1
        End While
''# code omitted

我确实尝试了下面的方法,但是没有结果(抛出一个NullReferenceException)。

代码语言:javascript
运行
AI代码解释
复制
        While i <= last AndAlso i < topDocs.totalHits
            If Date.Parse(doc.[Get]("date")) >= Date.Today Then
                doc = searcher.Doc(topDocs.scoreDocs(i).doc)
                IDList.Add(doc.[Get]("id"))
                i += 1
            End If
        End While

我还找到了以下文档,但我无法理解它的正面或反面

http://lucene.apache.org/java/1_4_3/api/org/apache/lucene/search/DateFilter.html

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-30 11:05:03

您将链接到Lucene1.4.3的api文档。Lucene.Net目前为2.9.2。我想升级应该到了。

首先,您正在大量使用Store.Yes。存储字段将使索引更大,这可能是性能问题。您的日期问题可以很容易地通过以"yyyyMMddHHmmssfff“格式将日期存储为字符串来解决(这是非常高的分辨率,下降到毫秒)。您可能希望降低分辨率,以创建更少的标记以减少索引大小。

代码语言:javascript
运行
AI代码解释
复制
var dateValue = DateTools.DateToString(searchableEvent.EventDate, DateTools.Resolution.MILLISECOND);
doc.Add(new Field("date", dateValue, Field.Store.YES, Field.Index.NOT_ANALYZED));

然后将筛选器应用于搜索(第二个参数,当前传递空/空)。

代码语言:javascript
运行
AI代码解释
复制
var dateValue = DateTools.DateToString(DateTime.Now, DateTools.Resolution.MILLISECOND);
var filter = FieldCacheRangeFilter.NewStringRange("date", 
                 lowerVal: dateValue, includeLower: true, 
                 upperVal: null, includeUpper: false);
var topDocs = searcher.Search(query, filter, 10000);

您可以使用将常规查询与BooleanQuery相结合的RangeQuery来完成此操作,但这也会影响评分(这是根据查询计算的,而不是筛选器)。为了简单起见,您还可能希望避免修改查询,因此您知道执行的是什么查询。

票数 10
EN

Stack Overflow用户

发布于 2010-12-30 10:59:48

您可以将多个查询与一个BooleanQuery合并。由于Lucene只搜索文本,请注意索引中的日期字段必须按日期中最重要的部分排序,即以IS8601格式("2010-11-02T20:49:16.000000+00:00")。

示例:

代码语言:javascript
运行
AI代码解释
复制
Lucene.Net.Index.Term searchTerm = new Lucene.Net.Index.Term("fullText", searchTerms);
Lucene.Net.Index.Term dateRange = new Lucene.Net.Index.Term("date", "2010*");

Lucene.Net.Search.Query termQuery = new Lucene.Net.Search.TermQuery(searchTerm);
Lucene.Net.Search.Query dateRangeQuery = new Lucene.Net.Search.WildcardQuery(dateRange);

Lucene.Net.Search.BooleanQuery query = new Lucene.Net.Search.BooleanQuery();
query.Add(termQuery, BooleanClause.Occur.MUST);
query.Add(dateRangeQuery, BooleanClause.Occur.MUST);

或者,如果通配符不够精确,可以添加一个RangeQuery

代码语言:javascript
运行
AI代码解释
复制
Lucene.Net.Search.Query termQuery = new Lucene.Net.Search.TermQuery(searchTerm);
Lucene.Net.Index.Term date1 = new Lucene.Net.Index.Term("date", "2010-11-02*");
Lucene.Net.Index.Term date2 = new Lucene.Net.Index.Term("date", "2010-11-03*");
Lucene.Net.Search.Query dateRangeQuery = new Lucene.Net.Search.RangeQuery(date1, date2, true);

Lucene.Net.Search.BooleanQuery query = new Lucene.Net.Search.BooleanQuery();
query.Add(termQuery, BooleanClause.Occur.MUST);
query.Add(dateRangeQuery, BooleanClause.Occur.MUST);
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4565303

复制
相关文章
Yelp 故障转移策略的实现
作者 | Yelp 工程团队 译者 | 王强 策划 | Tina 讲述 Yelp 工程师如何协调其流量故障转移流程,并在可靠性、性能和成本效率之间实现微妙平衡的故事。 表面上看,这是很简单明了的流程:Yelp 的站点可靠性工程师有时会转移流量,以防止出现面向用户的错误。但是在幕后,这一流程涉及生产系统、基础架构团队以及成百上千开发人员和他们负责服务之间的复杂编排。这篇文章讲述的就是 Yelp 的生产工程和计算基础架构团队如何实现故障转移策略,在可靠性、性能和成本效率之间找到平衡的故事。 什么是流量故障转移?
深度学习与Python
2023/04/01
4450
Yelp 故障转移策略的实现
Yelp 的 Spark 数据血缘建设实践!
在这篇博文中,我们介绍了 Spark-Lineage,这是一种内部产品,用于跟踪和可视化 Yelp 的数据是如何在我们的服务之间处理、存储和传输的。
从大数据到人工智能
2022/09/16
1.5K0
Yelp 的 Spark 数据血缘建设实践!
GAN 优化 Yelp 形象图片广告
论文标题:You eat with your eyes first: Optimizing Yelp Image 论文链接:https://arxiv.org/abs/2011.01434 论文单位:斯坦福大学
CV君
2020/11/23
2K0
GAN 优化 Yelp 形象图片广告
Yelp 的 Apache Cassandra 集群重建解决方案
Yelp 构建了一个解决方案,利用其数据流架构来清理来自已损坏的 Apache Cassandra 集群的数据。提供解决方案的团队探索了许多可能的选项来解决数据损坏问题,但最终不得不将数据转移到一个新的集群中,以便在转移过程中移除损坏的记录。
深度学习与Python
2023/09/08
2010
Yelp 的 Apache Cassandra 集群重建解决方案
Yelp,如何使用深度学习对商业照片进行分类
作者:张天雷 来源:InfoQ 摘自:http://www.infoq.com/cn/news/2015/11/Yelp-photo Yelp是美国最大点评网站,拥有世界各地的Yelper上传的成千上万的照片。各种各样的照片给进入当地的商业提供了一个丰富的窗口。通过开发一个照片理解系统使Yelp能够创建有关个人照片的语义数据。跟Yelp第一次在基于内容的照片多样化方面所做的尝试一样,由系统生成的数据正在增强Yelp近期推出的封面照片多样化、标签式照片浏览等服务。 构建一个照片分类器 对于理解照片中的模棱两可
大数据文摘
2018/05/23
8960
Salesforce连接器在Yelp中的应用案例
Yelp是美国著名商户点评网站,创立于2004年,囊括各地餐馆、购物中心、酒店、旅游等领域的商户,用户可以在Yelp网站中给商户打分,提交评论,交流购物体验等。
臭豆腐
2019/04/16
1.1K0
Salesforce连接器在Yelp中的应用案例
Flink Forward 2019--实战相关(9)--Yelp公司分享CEP应用
Creating millions of user sessions using Complex Event Processing -- Prem Santosh & Udaya Shankar(Yelp)
阿泽
2019/07/11
5880
Flink Forward 2019--实战相关(9)--Yelp公司分享CEP应用
【深度学习】Yelp是如何使用深度学习对商业照片进行分类的
Yelp是美国最大点评网站,拥有世界各地的Yelper上传的成千上万的照片。各种各样的照片给进入当地的商业提供了一个丰富的窗口。通过开发一个照片理解系统使Yelp能够创建有关个人照片的语义数据。跟Yelp第一次在基于内容的照片多样化方面所做的尝试一样,由系统生成的数据正在增强Yelp近期推出的封面照片多样化、标签式照片浏览等服务。 构建一个照片分类器 对于理解照片中的模棱两可的目标,其实有许多不同的方式。一开始,为了帮助简化Yelp的问题,Yelp只专注于将照片分类为几个预定义的类。之后,Yelp又只专注于
陆勤_数据人网
2018/02/27
1.4K0
【深度学习】Yelp是如何使用深度学习对商业照片进行分类的
Flink Forward 2019--实战相关(16)--Yelp分享实时访问规模预测
Realtime Store Visit Predictions at Scale -- Luca Giovagnoli(Yelp)
阿泽
2019/08/20
4370
Flink Forward 2019--实战相关(16)--Yelp分享实时访问规模预测
neo4j APOC插件安装以及Yelp示例数据导入
APOC库包含许多(约450个)程序和函数,可帮助处理数据集成,图算法或数据转换等
lovelife110
2021/01/14
1.3K0
案例分享 | Yelp 如何在 Kubernetes 上运行 Kafka(第 2 部分 - 迁移)
上一篇文章,我们详细介绍了开发基于 PaaSTA 的新部署模型的架构和动机。现在想分享我们将现有 Kafka 集群从 EC2 无缝迁移到基于 Kubernetes 的内部计算平台的策略。为了帮助促进迁移,我们构建了与集群架构的各种组件接口的工具,以确保该过程是自动化的,并且不会影响用户读取或写入 Kafka 记录的能力。
灵雀云
2022/08/12
1.1K0
案例分享 | Yelp 如何在 Kubernetes 上运行 Kafka(第 2 部分 - 迁移)
[- 壹 FFmpeg4.2.1 -] CLion 集成 、Xcode 集成、 Android集成
吾的最终目的在移动端。但为了方便对FFmpeg的认知和调试,先在桌面把它消化一下,毕竟在Android中修改、调试都比较费事。知识殊途同归,重要的不是它在哪里,而是它能干嘛,你想拿他干嘛。 FFmpeg是c写的,在使用时需要动态链接到相应的库上。虽然用文本编辑器和命令行也能手撕代码,但IDE能让人少调些头发。这里记录一下Xcode 和 CLion 桌面、Android集成FFmpeg的方式。本篇的目标只有一个:跑起来 ---- 1.安装与配置ffmpeg 1.1:安装ffmpeg brew可以安装f
张风捷特烈
2020/04/30
1.3K0
[- 壹 FFmpeg4.2.1 -] CLion 集成 、Xcode 集成、 Android集成
Flink Forward 2019--实战相关(17)--Yelp分享实时访问规模预测
Using Flink to inspect live data as it flows through a data pipeline -- Matthew Dailey(Splunk)
阿泽
2019/08/23
7480
Flink Forward 2019--实战相关(17)--Yelp分享实时访问规模预测
案例分享 | Yelp 如何在 Kubernetes 上运行 Kafka(第 1 部分 - 架构)
在 Yelp,Kafka 每天接收数百亿条消息来推进数据驱动并为关键业务管道和服务提供支持。我们最近通过在 PaaSTA (Yelp 自己的平台即服务)上运行集群,对 Kafka 部署架构进行一些改进。基于 K8s 的部署利用了 Kafka 的自定义 Kubernetes operator 以及用于生命周期管理的 Cruise Control 。
灵雀云
2022/08/12
5940
案例分享 | Yelp 如何在 Kubernetes 上运行 Kafka(第 1 部分 - 架构)
【微服务干货系列】Yelp公司总结的微服务架构的实践经验
创建 首先探讨系统的整体架构 在你开始考虑设计服务之初,也就是动手写代码和设计之前,和团队成员、其他服务领域的专家聊一聊。除了如何与现有的特性、产品以及服务如何适配之外,考虑一下你想要额外添加的功能。考虑一种最合理的组织整体功能的方式。有时候添加新功能意味着要对现有组件进行重组。 我们希望避免那些简单的 “append-only”服务架构,也就是说development只存在于新的服务中 核实是否能够给现有服务添加新的功能 在编写新的服务之前,应该核实是否现有服务不包括你的功能。它可能会与现有的功能存在冲突
Rainbond开源
2018/05/31
6500
【开源公告】NeuralNLP-NeuralClassifier - 深度学习文本分类工具
NeuralNLP是腾讯广告(Tencent Marketing Solution,TMS)(https://e.qq.com/)数据算法团队搭建的一个基于PyTorch的深度学习NLP公共实验平台,主要涵盖文本分类、序列标注、语义匹配、BERT微调和文本生成等,目前已经广泛应用于腾讯广告业务文本相关的需求场景中,如广告定向、相关性计算、LookAlike、动态创意、点击率/转化率预估等。 NeuralClassifier是NeuralNLP的一个子项目,是一款基于PyTorch开发的深度学习文本分类工具
腾讯开源
2019/07/09
1.4K0
【开源公告】NeuralNLP-NeuralClassifier - 深度学习文本分类工具
「集成架构」理解企业应用集成
应用程序和数据集成是交付新客户体验和服务的基础。通常,一个团队管理整个企业的单片集成技术,但是应用程序正变得越来越复杂——它们是分布式的,并且必须快速扩展和更改,以在竞争的市场中保持同步。这些新的挑战需要基于云本地集成技术和敏捷团队的迭代方法。
架构师研究会
2022/01/25
1.6K0
「集成架构」理解企业应用集成
集成wangEditor
寿命的缩短与思想的虚耗成正比。——达尔文 官方文档 wangEditor:Typescript 开发的 Web 富文本编辑器, 轻量、简洁、易用、开源免费 html里集成wangEditor非常简单 <div id="div1"></div> <script src="https://unpkg.com/wangeditor/dist/wangEditor.min.js"></script> <script> var E = window.wangEditor; var editor =
阿超
2022/08/16
5570
集成wangEditor
集成学习
集成学习(ensemble learning)通过构建并集合多个学习器完成学习任务,有时也被称为多分类器系统(multi-classifier system)、基于委员会的学习(committee based learning)等。先产生一组“个体学习器”(invidual learner),再用某种策略将它们结合起来。个体学习器通常由一个现有的学习算法从训练数据中产生,例如C4.5决策树、BP神经网络算法等,此时集成中只包含同种类型的个体学习器,例如“决策树集成”中全是决策树,“神经网络集成”中全是神经网络,这样的集成是“同质”的(homogeneous)。同质集成中的个体学习器亦称为“基学习器”(base learner),相应的算法称为“基学习算法”(base learning algorithm)。集成也包含不同类型的个体学习器。例如同时包含决策树和神经网络,这样的集成是“异质”的(heterogeneous)。异质集成中的个体学习器由不同的学习算法生成,这时就不再有学习算法;相应的,个体学习器一般不称为学习器,常称为“组件学习器”(component learner)或直接称为个体学习器。
狼啸风云
2019/11/07
1.2K0
集成学习
「集成架构」Redhat 观点:理解企业集成
应用程序和数据集成是交付新客户体验和服务的基础。通常,一个团队管理整个企业的单片集成技术,但是应用程序正变得越来越复杂——它们是分布式的,并且必须快速扩展和更改,以在竞争的市场中保持同步。这些新的挑战需要基于云本地集成技术和敏捷团队的迭代方法。
架构师研究会
2019/12/10
9270
「集成架构」Redhat 观点:理解企业集成

相似问题

基于位置的Yelp API集成

18

Yelp在Android中的集成

20

iPhone应用: Yelp Api集成问题

11

如何将YELP API与iphone集成?

11

如何在iPhone应用程序中集成Yelp APi?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档