作者:妩媚的谢染小妃 | 来源:互联网 | 2023-07-29 11:52
问题是这样的:我在做一个全文检索引擎,对数据库表建索引进行查询,然后对查询结果进行排序;查询用到这三个字段:name(名称),address(地址),visits(查询频率);其中查询频率visi
问题是这样的:我在做一个全文检索引擎,对数据库表建索引进行查询,然后对查询结果进行排序;查询用到这三个字段:name(名称),address(地址),visits(查询频率);其中查询频率visit是动态变化的;
举例说明一下:我输入“测绘”,查询结果如下图,假设我想得到的结果是“省测绘局”,我点击省测绘局,会增加数据库中visit的值,我想通过visit的值来对查询结果进行排序。查询关键词和name匹配度的值为x,和address匹配度为:y,还有visit值为z,怎么建立一个数学模型:f(x,y,z)=f(x) + f(y) + f(z)?最后我根据f(x,y,z)对结果排序?x、y的值我是根据一个现成的一个开源的全文检索引擎lucene的匹配算法得到的在0~1之间,z值就是访问次数动态的在变化>0的整形。
6 个解决方案
好像在复杂query的时候可以设置各个query的boost值
我们平常使用不用去管那个tfidf的公式。
Lucene allows influencing search results by "boosting" in more than one level:
Document level boosting - while indexing - by calling document.setBoost() before a document is added to the index.
Document's Field level boosting - while indexing - by calling field.setBoost() before adding a field to the document (and before adding the document to the index).
Query level boosting - during search, by setting a boost on a query clause, calling Query.setBoost().
刚看了一下https://lucene.apache.org/core/3_6_2/scoring.html,说可能有三个层次的boost,前两个boost在索引的时候就boost了,
如果简单在query的时候boost,看看org.apache.lucene.search下面的各种query用法就可以