Database 使用Solr搜索数字数据
我将Solr用于(一个不寻常的?)为数字数据提供排名结果的用例/Database 使用Solr搜索数字数据,database,search,solr,search-engine,numerical-methods,Database,Search,Solr,Search Engine,Numerical Methods,我将Solr用于(一个不寻常的?)为数字数据提供排名结果的用例/ 假设我有一组对象O{O1…On}的记录集,对于这些对象,我有多个测量值:例如粘度、孔隙度、渗透率等 对于On+1对象,我需要搜索上面的记录集以找到最“相似”的(沿粘度、孔隙度、渗透率的多个维度)等 由于记录集O是数亿条记录,因此实际上不可能对每个记录运行一个相似性度量,如余弦或Minkowski。我需要将结果集删减到前100名左右的候选项,并使用Solr运行查询 我使用On+1对象的参数运行范围查询,例如孔隙率在[9.5到10.5
在实现自定义排序时,可以接收以下参数:
- 值步骤-降低分数的步骤
- 分数步-每当出现“值步”时,将分数降低该值
- 最大附加分数-“完美匹配”将在本地分数(来自reqular搜索查询)之外具有该分数,非完美匹配将具有较低的(非负值)值
例子 因此,例如,具有以下设置:
- 值步长=0.1
- 分数步长=0.01
- 最大附加分数=1
- 3(对于doc1)
- 5(用于doc2)
- 6(用于doc3)
- 7(用于doc4)
- 999999999(用于doc5)
q={!nearestParser valueStep=0.1 scoreStep=0.01 maxStep=1}permeability:5
然后结果如下(假设所有文档的初始分数相同(1))
- doc2(得分为-2.0)
- doc3(得分为-1.9)
- doc1(得分为-1.8)
- doc4(得分为-1.8)
- doc5(得分为-1)
- Doc2将拥有最好的分数,因为它是一场完美的比赛
- Doc3将是第二个,因为它与首选输入尽可能接近(没有完全匹配)(并且在分数距离内)
- Doc1和doc4的得分相同,因为它们与初始搜索查询的距离相同
- Doc5将具有初始分数,因为它超出了被视为“相似”的范围
其他可能的解决办法 在阅读了有关的内容后,我还想到了使用Trie*字段结构(具体地说,利用它高效处理数值范围搜索的能力),以便从索引中找到最接近的值。。。但我还没弄明白怎么做
这可能会更有效,尽管更复杂。。。Trie*结构仍有可能无法处理此类操作…这种相似性对最终用户应该如何工作?他们只能在结果本身中搜索相似的结果(例如,选择一个结果文档并获得相似性),还是应该提供一个输入数据作为相似性的基础,或者两者兼而有之?实际上,两者都可以,即用户上传一个对象的值,我们提供一个结果集,从中他们也可以搜索相似的结果。
q={!nearestParser valueStep=0.1 scoreStep=0.01 maxStep=1}permeability:5