Java Lucene评分和排序

Java Lucene评分和排序,java,lucene,Java,Lucene,我希望使用Lucene(4.10)能够匹配和排序数据库中的所有记录。我已经为包含我想匹配的许多不同项目的数据的记录编制了索引 数据示例如下所示 age: 35 fav_colour: red fav_car_manufacturer: bmw 我想返回从最接近的匹配降序排列的所有文档,我可以根据分数进行降序 我目前这样做是为了构建一个查询 MatchAllDocsQuery allDocsClause = new MatchAllDocsQuery(); TermQuery ageTerm

我希望使用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,蓝色,雷克萨斯之间的相关性
  • 50岁是否比30岁或34岁更接近35岁(在本例中)
  • 是否可以提升固定数据集(即颜色)的属性值-例如,在查询中,使用boost+10搜索我最喜爱的颜色=红色,然后使用boost+5搜索第二喜爱的颜色,等等
您可能会感兴趣,它显示了如何使用CustomScoreQuery按数字距离评分。如果您希望“红色”与“粉色”的匹配比“蓝色”的匹配更好,那么您也可以使用CustomScoreQuery执行类似的操作。