Могу ли я искать документы Solr по элементу многозначного поля? - PullRequest
5 голосов
/ 31 августа 2010

У меня есть набор документов Solr, содержащих (среди прочих полей) многозначные поля с процентными данными или -1, если значение равно нулю, например,

<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>

Мне нужно найти документы, в которых мультиПоле -value содержит или не содержит определенный член для полного набора тестовых случаев.Если я смогу выполнить любой из приведенных ниже запросов, было бы очень полезно найти конкретный документ из нескольких сотен тысяч:

1) Могу ли я найти документ, в котором нет членов определенного многозначного поля соответствуют определенному критерию?(Приведенный выше документ будет возвращен, если я запросю «у alpha нет членов, соответствующих -1».)

2) Могу ли я найти документ, в котором хотя бы один членовконкретное многозначное поле соответствует определенному критерию?(Приведенный выше документ будет возвращен, если я запросю «у альфы есть хотя бы один член> 0» или «у беты есть хотя бы один член> 0».)

Я предполагаю, что запрос похож на alpha:[0 TO 1]не работает, потому что поле является массивом вместо скаляра.Окончательный ответ «Это невозможно» так же полезен, как и ответ «Вот как вы это делаете» - заранее спасибо.

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

Ответы [ 2 ]

6 голосов
/ 31 августа 2010
  1. Да. -alpha:"-1.0" достигает этого.

  2. Ваш собственный пример, alpha:[0 TO 1], является решением.

Проще говоря, почему это работает: каждое поле не является значением или массивом, а представляет собой вектор терминов. Запрос поля для определенного термина - это запрос на включение (или исключение), а не операция равенства.

Массив, на который вы ссылаетесь, является частью набора результатов, который представляет собой обычные сохраненные данные, возвращаемые Solr как часть результатов поиска.

2 голосов
/ 31 августа 2010

Это, конечно, возможно.

Обычно я использую параметр FQ (фильтр запроса), чтобы получить то, что вы хотите: http://wiki.apache.org/solr/CommonQueryParameters#fq

Но вы можете просто добавить его и к запросу.

Решение для # 1:

fq=-alpha:-1.0

Отфильтровывает все, что имеет альфа, равный -1,0

Я не уверен насчет решения № 2. Вы пробовали код, который вы упомянули?

fq=beta:[0.0 TO 1.0]

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

...