Могу ли я искать документы Solr с помощью Multi-Value Field?

StackOverflow https://stackoverflow.com/questions/3611191

  •  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] Не работает, потому что поле - это массив вместо скаляра. Окончательный ответ «Это невозможен» так же полезно, как ответ «вот как вы это делаете» - заранее спасибо.

РЕДАКТИРОВАТЬ: Как и в случае многих проблем, ответ «перепроверьте свои предположения» - в частности, разработчик, созданный нашими документами, отключил индексацию на процентных полях.

Это было полезно?

Решение

  1. да. -alpha:"-1.0" достигает этого.

  2. Ваш собственный пример, 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]

У меня нет хорошего образца набора данных для проверки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top