2013-06-12 3 views
2

solr의 정규 표현식 기능을 사용하여 날짜 필드를 쿼리하려고합니다. 다음과 같은 간단한 쿼리를 만들려고하지만 결과가 0이고 오류가 발생하지 않습니다. ? ... Q = DATE : 58 \ : \/200 [0-9] -03-30T11Solr 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, text는 작동하고 'text'필드가 message로 설정된 모든 문서를 반환합니다. 날짜 입력란에 대해 다음과 같은 결과가 표시됩니다. ...? q = 날짜 :/2013-03-30T15 \ : 58 \ : 4 (. *)?/& fl = id, date –

+1

'? q = date : /.*/& fl = date'와 같은 간단한 표현입니다. 이것이 작동하지 않는다면,'date'는 직선적으로 regex 될 수있는'string' 타입이 아닐 수도 있습니다. –

+1

^그거야. q = date : /.*/& fl = date –

답변

1

정규식 외모 : (40z)로써 그에/FL = & DATE 여기

일부 샘플의 출력 대신 콜론을 탈출 괜찮아요, 시도 URL 인코딩 값 : (. 질문에 대한 코멘트에서 마이그레이션)

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

,

적어도 날짜 필드를 정규식으로 변환하는 것은 불가능합니다.

당신이 발견, 심지어 다음 쿼리 date:/.*_.*/, date:/.*,.*/date:/.*A.*/ 반환 결과는 타임 스탬프 명확하게 그 문자를 하나도 없다하더라도. 난 당신이 : 같은 문자를 쿼리 할 때 따라서 당신이 실제로 (예를 들어 원시 이진 ) 데이터를 인코딩 사이에 그 문자를 가지고 일어날 결과를 발견하고, 무슨 일이의 것은 datestring 필드 아니라고 생각합니다. (평범한 사람은 메모장에서 이진 데이터 (실행 파일과 같은)를 열어 ASCII 문자를 검색하는 것을 상상해보십시오.)

이렇게하면 20-30과 같은 결과가 나오는 이유에 대해서도 설명합니다. 모든 쿼리 : 통계적으로 말하면 바이너리 (및 다른 인코딩 된) 데이터 사이에서 임의의 ASCII 문자를 정규식하는 것은 거의 동일한 결과 빈도를 반환해야합니다.