2015-07-19 2 views
1

У меня есть индекс отношений, названный датами, который индексирует по 2 полям - «год-число» и «тип». Я намерен использовать интервальные запросы на год-числовом и так индексировали его как цифровойNeo4j: сложные запросы с числовым диапазоном

dates.add(role1, "year-numeric", new ValueContext(2000).indexNumeric()); 

где role1 связь между 2 узлами.

На моем графике у меня есть 2 типа отношений, которые захватываются вторым полем типа «type».

В то время как я могу запросить его по отдельности:

IndexHits<Relationship> hits = dates.query(QueryContext.numericRange("year-numeric", 1990, 2004),null,null); 

и

hits = dates.query("type:occurs"); 

я был бы обязан, если кто-то может мне помочь в объединении вместе эти два условия.

Я проверил здесь: queryContext - filtering with numbers neo4j/lucene, но я не могу понять решение.

Спасибо!

+0

как насчет 'date.query (« год-число: [1990-2004] и введите: происходит »)'? (не пробовал себя - просто стрелять из бедра). Не забудьте добавить тип в индекс, а также 'date.add (role1," type ", role1.getType(). Name())' –

+0

Привет, спасибо за ответ. Это не работает: я получаю следующую ошибку: Исключение в потоке «main» java.lang.RuntimeException: org.apache.lucene.queryParser.ParseException: не удается проанализировать «год-число: [1990-2004]» и введите: ': Encounted "" 2004 "" в строке 1, колонка 22. Ожидал: "]" – graphEnthusiast

+0

Возможно, вам придется использовать экземпляр объекта запроса, который является BooleanQuery или AndQuery или что-то в этом роде. –

ответ

1

Основываясь на материалах в комментариях, я сделал еще несколько копаний в lucene и разработал следующее решение. Не уверен, является ли это наиболее оптимальным:

BooleanQuery booleanQuery = new BooleanQuery(); 
TermQuery query1 = new TermQuery(new Term("type","occurs")); 
NumericRangeQuery<Integer> pageQueryRange = NumericRangeQuery.newIntRange("year-numeric", 1990, 2005, true, true); 
booleanQuery.add(query1, BooleanClause.Occur.MUST); 
booleanQuery.add(pageQueryRange, BooleanClause.Occur.MUST); 
IndexHits<Relationship> hits = dates.query(booleanQuery); 
Смежные вопросы