通过按最高值或最低值排序的属性查询Neo4j的方法

保罗·杰克逊

在Neo4j中,如果我想查找具有最高或最低属性值的节点,可以使用Cypher关键字Order By和Limit。我想使用嵌入式API来完成相同的任务。我知道Lucene可以支持此功能,但是看不到如何使用Neo的API做到这一点。

public TopFieldDocs search(Query query,  int n, Sort sort)

https://neo4j.com/docs/java-reference/current/javadocs/org/neo4j/graphdb/index/ReadableIndex.html

保罗·杰克逊

我调查了一下,答案是肯定的,可以做到的。中的第二个参数IndexHits<T> query( String key, Object queryOrQueryObject )可以是可解析的(by org.apache.lucene.queryParser.QueryParser)字符串,aorg.apache.lucene.search.Query或aorg.neo4j.index.lucene.QueryContext

这是一个代码段,允许要求“ EntityType”属性具有特定值,要求数字属性为非空白,并返回按数字属性排序的前n个匹配。

...
List<TopNValue> values = new ArrayList<>();
QueryContext queryContext = getQueryContext(entityType, property, propertyType, n, true);
try (IndexHits<Node> indexHits = nodeIndex.query(property, queryContext))
{
  for (Node node : indexHits)
  {
    values.add(node);
  }
}
...

private static QueryContext getQueryContext(String entityType, String property, String type, int n, boolean reversed)
{
  NumericRangeQuery propertyQuery;
  int fieldType;
  switch (type)
  {
    case GraphTypes.LONG:
      propertyQuery = NumericRangeQuery.newLongRange(property, Long.MIN_VALUE, Long.MAX_VALUE, true, true);
      fieldType = SortField.LONG;
      break;
    case GraphTypes.DOUBLE:
      propertyQuery = NumericRangeQuery.newDoubleRange(property, Double.MIN_VALUE, Double.MAX_VALUE, true, true);
      fieldType = SortField.DOUBLE;
      break;
    case GraphTypes.FLOAT:
      propertyQuery = NumericRangeQuery.newFloatRange(property, Float.MIN_VALUE, Float.MAX_VALUE, true, true);
      fieldType = SortField.FLOAT;
      break;
    case GraphTypes.INT:
      propertyQuery = NumericRangeQuery.newIntRange(property, Integer.MIN_VALUE, Integer.MAX_VALUE, true, true);
      fieldType = SortField.INT;
      break;
    default:
      throw new IllegalArgumentException("Cannot create NumericRangeQuery for type: " + type);
  }
  Query query;
  if (entityType == null)
  {
    query = propertyQuery;
  }
  else
  {
    TermQuery entityTypeQuery = new TermQuery(new Term("EntityType", entityType));
    BooleanQuery booleanQuery = new BooleanQuery();
    booleanQuery.add(entityTypeQuery, BooleanClause.Occur.MUST);
    booleanQuery.add(propertyQuery, BooleanClause.Occur.MUST);
    query = booleanQuery;
  }
  Sort sorting = new Sort(new SortField(property, fieldType, reversed));
  return new QueryContext(query).sort(sorting).top(n);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从数组中获取从php中最高值到最低值排序的键?

来自分类Dev

如何从最低值到最高值对多行进行排序?

来自分类Dev

最高值和最低值查询报告的实体比较

来自分类Dev

获取最高值和最低值的用户

来自分类Dev

如何截取最高值和最低值的 5%

来自分类Dev

按最高值排序

来自分类Dev

在T-SQL中,如何从最低值到最高值对钱(我使用VARCHAR)进行排序?

来自分类Dev

查找数据框中最高值和最低值之间的时间差并按因子排序

来自分类Dev

分割数据框:保留最高值并将最低值分组

来自分类Dev

PHP获取数组中的最高值和最低值

来自分类Dev

查找列上间隔内的最高值和最低值位置?

来自分类Dev

通过属性值neo4j获取节点

来自分类Dev

仅当满足条件时才返回n个匹配结果,从最高值到最低值

来自分类Dev

按关系顺序排序属性neo4j

来自分类Dev

按任何字段中的最高值排序

来自分类Dev

按嵌套列表的最高值对字典进行排序

来自分类Dev

按最高值对数组中的对象进行排序

来自分类Dev

MongoDb - 按数组字段的最高值元素排序

来自分类Dev

显示最低和最高值的NoUISlider

来自分类Dev

neo4j查询中ON MATCH SET之前属性的参考当前值

来自分类Dev

定义值的自定义排序,然后根据该排序从数组中获取最高和最低值-PHP

来自分类Dev

导入时更新Neo4j中的属性值

来自分类Dev

导入时更新Neo4j中的属性值

来自分类Dev

在HTML表中标记最高和最低值

来自分类Dev

在数据对象中选择x的最高/最低值

来自分类Dev

在HTML表中标记最高和最低值

来自分类Dev

PHP:在mysql列中获得最高和最低值?

来自分类Dev

numpy排序并删除最高值

来自分类Dev

Aerospike查询返回最高值

Related 相关文章

热门标签

归档