Могу ли я искать документы Solr с помощью Multi-Value Field?
-
26-09-2019 - |
Вопрос
У меня есть набор документов Solr, содержащий (среди других полей) многозначных полей с процентными данными или -1, если значение равно NULL, например,
<doc>
...
<arr name="alpha">
<float>0.23</float>
<float>0.23</float>
<float>0.43</float>
</arr>
<arr name="beta">
<float>0.52</float>
<float>-1.0</float>
<float>0.34</float>
</arr>
<arr name="gamma">
<float>-1.0</float>
<float>-1.0</float>
<float>-1.0</float>
</arr>
...
</doc>
Мне нужно найти документы, где много значений содержится или не содержит определенного элемента для полного набора тестовых случаев. Если я смогу получить либо из запросов ниже, чтобы работать, это будет огромная помощь, чтобы найти определенный документ из нескольких сотен тысяч:
1) Могу ли я найти документ, где никто членов определенного многоцелевого поля соответствует определенному критерию? (Вышеуказанное док будет возвращено, если я запросил, чтобы «Альфа не имеет сопоставления -1».)
2) Могу ли я найти документ, где хотя бы один членов конкретного многоцелевого поля встречается определенным критерием? (Вышеуказанное док будет возвращено, если я запросил «Alpha, есть минимум один из членов> 0» или «Beta, имеет хотя бы один участник> 0».)
Я предполагаю, что запрос, как alpha:[0 TO 1]
Не работает, потому что поле - это массив вместо скаляра. Окончательный ответ «Это невозможен» так же полезно, как ответ «вот как вы это делаете» - заранее спасибо.
РЕДАКТИРОВАТЬ: Как и в случае многих проблем, ответ «перепроверьте свои предположения» - в частности, разработчик, созданный нашими документами, отключил индексацию на процентных полях.
Решение
да.
-alpha:"-1.0"
достигает этого.Ваш собственный пример,
alpha:[0 TO 1]
, это решение.
Чтобы поставить просто почему это работает: каждое поле не является значением или массивом, а скорее вектор терминов. Запрос поля для определенного срока - это запрос на включение (или исключение), а не операцию равенства.
Массив, который вы ссылаетесь, является частью набора результатов, что является простой хранящимся данными, которые возвращаются Solr как часть результатов поиска.
Другие советы
Это, безусловно, возможно.
Я обычно использую параметр FQ (Filter Query), чтобы получить то, что вы хотите:http://wiki.apache.org/solr/commonqueryParameters#fq.
Но вы можете просто бросить его на запрос.
Решение для # 1:
fq=-alpha:-1.0
Фильтрует все, что имеет альфа, равное -1,0
Я не уверен в решении # 2. Вы пробовали код, который вы упомянули?
fq=beta:[0.0 TO 1.0]
У меня нет хорошего образца набора данных для проверки.