다른 조건에 따라 다른 필드를 검색하려면 먼저 특정 조건을 검색해야 할 필요가 있으므로 여러 쿼리를 발행하는 것과 거의 같습니다. 말했다
, 경우 (예를 들어, 아웃 - 오브 - 박스가/그룹/기타 SOLR 기능 정렬)에
nested queries 사용할 수 있습니다 한 번 쿼리로 그것을 할 필요가있다.
두 가지 조건을 정의
(일본어 문제로되지만 쉽게 더 OR 절을 확장 할 수있다) 상기 q
파라미터는 다음 값을 수신 할 수 있으므로, 거기
가
_query_:"{!edismax fq=$fq1 qf=$qf1 v=$condQuery}"
OR
_query_:"{!edismax fq=$fq2 qf=$qf2 v=$condQuery}"
쿼리에 Parameter Dereferencing 사용 매개 변수를 solr에 전달하기 전에 특수 문자를 수동으로 이스케이프 할 필요가 없습니다.
- FQ1 - 제 특수 조건
- qf1 - 필드 목록 제 특수 조건 (FQ1)
- FQ2위한 검색 방법 - 제 특수 조건
- qf2 - 첫 번째 특수 조건을 검색 할 필드 목록 (fq2)
- condQuery - 실제 검색 용어/쿼리
FQ1 기준을 정의하기 위해 비어있을 수 있습니다 (이 특별한 경우 - product
에 text
및 title
에서 검색을하지만).
원시 매개 변수 자체는 다음과 같이 보일 것이다 :
fq1=&qf1=text^0.5 title^10.0&fq2=author:"Tom"&qf2=text^0.5 title^10.0 Product&condQuery=5
을 최종 쿼리는 다음과 같이 될 것입니다 : SOLR 응답에 SOLR에 의해 반환
http://localhost:8983/solr/collection1/select?q=_query_%3A%22%7B!edismax+fq%3D%24fq1+qf%3D%24qf1+v%3D%24condQuery%7D%22+OR+_query_%3A%22%7B!edismax+fq%3D%24fq2+qf%3D%24qf2+v%3D%24condQuery%7D%22&fl=*%2Cscore&wt=xml&indent=true&fq1=&qf1=text^0.5%20title^10.0&fq2=author:%22Tom%22&qf2=text^0.5%20title^10.0%20Product&condQuery=5
.. 나 같은 쿼리 (구조화 된 방식으로 보여주기 위해 제공됨) :
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
<lst name="params">
<str name="q">_query_:"{!edismax fq=$fq1 qf=$qf1 v=$condQuery}" OR _query_:"{!edismax fq=$fq2 qf=$qf2 v=$condQuery}"</str>
<str name="condQuery">5</str>
<str name="indent">true</str>
<str name="fl">*,score</str>
<str name="fq1"/>
<str name="qf1">text^0.5 title^10.0</str>
<str name="fq2">author:"Tom"</str>
<str name="qf2">text^0.5 title^10.0 Product</str>
<str name="wt">xml</str>
</lst>
</lst>
<result name="response" numFound="..." start="..." maxScore="...">
...
</result>
</response>
작동하더라도 각 조건이 별도의 내부 검색 쿼리를 가지므로 쿼리 시간에 미치는 영향을 고려하여 특정 사례에 미치는 영향을 측정하는 것이 좋습니다.
고맙습니다. 저는 이것을 구현하는 방법을 알아 내려고 노력했습니다. – Vince