Lucene得分和订购

时间:2014-10-31 13:55:54

标签: java lucene

我想使用Lucene(4.10)来匹配和排序数据库中的所有记录。我已经记录了包含我想要匹配的许多不同项目的数据的记录。

数据示例如下所示

age: 35
fav_colour: red
fav_car_manufacturer: bmw

我想根据分数返回从最接近的匹配降序排序的所有文件。

我目前这样做是为了构建一个查询

MatchAllDocsQuery allDocsClause = new MatchAllDocsQuery();

TermQuery ageTerm = new TermQuery(new Term("age", "35"));
TermQuery colorTerm = new TermQuery(new Term("fav_color", "red"));
TermQuery carTerm = new TermQuery(new Term("fav_car_manufacturer", "bmw"));

BooleanQuery query = new BooleanQuery();
query.add(allDocsClause, BooleanClause.Occur.MUST);
query.add(ageTerm, BooleanClause.Occur.SHOULD);
query.add(colorTerm, BooleanClause.Occur.SHOULD);
query.add(carTerm, BooleanClause.Occur.SHOULD);

这会返回一组得分的文件,这很好,但我怀疑这是否正常。

我的问题是

  • 这完全是荒谬的,无法匹配吗?在那,我的意思是我可以理解过滤或精确匹配会很好,但Lucene如何确定80,红色,福特是否与35,蓝色,lexus或多或少相关?
  • 年龄50是否接近35(在本例中)比30,34或更接近?
  • 是否可以提升固定数据集(即颜色)的属性值 - 例如,在查询中,使用BOOST +10搜索我喜欢的颜色=红色,然后使用BOOST +5搜索第二个喜欢的颜色等等?

0 个答案:

没有答案