2013-06-12 3 views
2

Я хочу использовать возможности регулярного выражения solr для запроса поля даты. Я пытаюсь сделать простой запрос следующим образом, но я получаю 0 результатов и никаких ошибок. ? ... д = ДАТА:/200 [0-9] -03-30T11 \: 58 \: 40Z/& фл = ДАТАSolr Date Regex Query

Вот несколько примеров выхода:

<response> 
<lst name="responseHeader"> 
<int name="status">0</int> 
<int name="QTime">0</int> 
<lst name="params"> 
<str name="fl">id,date</str> 
<str name="q">date:/.*:.*/</str> 
</lst> 
</lst> 
<result name="response" numFound="39" start="0"> 
<doc> 
<str name="id">1362932537549-A17C9685</str> 
<date name="date">2012-10-31T14:57:53Z</date> 
</doc> 
<doc> 
<str name="id">1362932537549-AD280D59</str> 
<date name="date">2012-10-25T09:57:53Z</date> 
</doc> 
<doc> 
<str name="id">1362932537549-B091BE97</str> 
<date name="date">2012-10-23T09:57:53Z</date> 
</doc> 
<doc> 
<str name="id">1362932537549-B0D8341C</str> 
<date name="date">2012-10-22T14:57:53Z</date> 
</doc> 
<doc> 
<str name="id">1362932537549-40083ADB</str> 
<date name="date">2010-08-12T14:33:00Z</date> 
</doc> 
<doc> 
<str name="id">1362932537549-9CA68015</str> 
<date name="date">2011-07-20T12:25:02Z</date> 
</doc> 
... 

<response> 
<lst name="responseHeader"> 
<int name="status">0</int> 
<int name="QTime">8380</int> 
<lst name="params"> 
<str name="fl">id,date</str> 
<str name="q">date:/.*.*/</str> 
</lst> 
</lst> 
<result name="response" numFound="1263" start="0"> 
<doc> 
<str name="id">1362932537549-5A0DAFB7</str> 
<date name="date">2010-08-12T14:31:00Z</date> 
</doc> 
<doc> 
<str name="id">1362932537549-D712F1C71</str> 
<date name="date">2011-12-01T13:23:53Z</date> 
</doc> 
<doc> 
<str name="id">1362932537549-3FAA6BC</str> 
<date name="date">2012-05-25T14:26:08Z</date> 
</doc> 
<doc> 
<str name="id">1362932537549-C8A6B81F</str> 
<date name="date">2010-08-12T14:25:00Z</date> 
</doc> 
<doc> 
<str name="id">1362932537549-D712F1C8</str> 
<date name="date">2011-12-01T13:23:53Z</date> 
</doc> 
... 

<response> 
<lst name="responseHeader"> 
<int name="status">0</int> 
<int name="QTime">34443</int> 
<lst name="params"> 
<str name="fl">id,date</str> 
<str name="q">date:/.*0.*/</str> 
</lst> 
</lst> 
<result name="response" numFound="65" start="0"> 
<doc> 
<str name="id">1362932537549-A4BC013G</str> 
<date name="date">2012-10-29T17:57:53Z</date> 
</doc> 
<doc> 
<str name="id">1362932537549-862F708G</str> 
<date name="date">2013-02-14T09:48:46Z</date> 
</doc> 
<doc> 
<str name="id">1362932537549-B8A38A74</str> 
<date name="date">2013-02-14T09:49:18Z</date> 
</doc> 
<doc> 
<str name="id">1362932537549-D4BA90CD</str> 
<date name="date">2007-10-09T21:53:34Z</date> 
</doc> 
<doc> 
<str name="id">1362932537549-3028513F</str> 
<date name="date">2011-06-24T20:30:22Z</date> 
</doc> 
+1

Если это помогает, что-то вроде ...? Q = text:/message (. *)?/& Fl = id, текст работает и возвращает каждый документ с полем «текст», установленным для сообщения. Для поля даты, когда я пытаюсь выполнить следующее, я получаю 0 результатов: ...? Q = date:/2013-03-30T15 \: 58 \: 4 (. *)?/& Fl = id, date –

+1

Начните с более простое выражение типа '? q = date: /.*/& fl = date'. Если это тоже не сработает, то может быть, что 'date' не является строковым типом, который может быть просто регулярным. –

+1

^Это работает. Я возвращаю все записи, когда я использую? Q = date: /.*/& fl = date –

ответ

1

Ваши регулярные выражения выглядит хорошо, но вместо того, чтобы избежать двоеточий, попробуйте URL-кодирующее значение: (. мигрировал из комментария по этому вопросу)

?q=DATE%3A%2F200%5B0-9%5D-03-30T11%5C%3A58%5C%3A40Z%2F&fl=DATE 

По-видимому, не возможно регулярное выражение для поля даты, по крайней мере, по крайней мере.

Как вы нашли, даже следующие запросы date:/.*_.*/, date:/.*,.*/ и date:/.*A.*/ результатов возврата, даже если метки времени явно не имеет ни одного из этих символов. Я думаю, что это происходит, что date не string поле, поэтому при запросе для персонажа, как :, вы на самом деле найти результаты, которые случаются иметь этот символ среди кодируются (например необработанных двоичных) данных. (С точки зрения непрофессионала, представьте, что вы открываете двоичные данные (например, исполняемый файл) в «Блокноте» и ищете символ ASCII.)

Это также объясняет, почему вы получаете одинаковое количество результатов от 20 до 30 для все эти запросы: статистически говоря, регулярное выражение для случайного символа ASCII среди двоичных (и других закодированных) данных должно возвращать примерно такую ​​же частоту результатов.