2014-06-12 3 views
0

키워드 순서를 유지하기 위해 쿼리를 원합니다. 예를 들어Solr 키워드 쿼리 순서 유지

:

SCART 1 - 나는 일치하고 싶은 위치 3, 4. 이제 Solr 경기 순위 2, 3, 4

어떻게 이러한 요구 사항을 충족하기 위해 쿼리를 작성하는? 슬롭 거리를 지정하고 싶습니다. 이것이 불가능한 경우 다른 제안을 위해 열려 있습니다.

지수

position | 1 2 3 4 5 6 7 8 9 
token | HDMI 1 SCART 1 TV tuner yes DLNA yes 

업데이트 :

내가 원하는 것을 상세하게 설명 할 것이다. 제품 특성 추출에 Solr을 사용하고 싶습니다. 나는 웹 상점을 크롤 링하고 Solr에 전체 제품 페이지를 넣을 것입니다. 필자는 불필요한 토큰 (HTML, 정지 단어)을 제거하기 위해 일부 필터를 사용합니다.

지금까지 시도하는 것 :

SCART 1 - 좋아하지, 그냥 문서

"SCART 1"에서 무작위로 일치 - 작동하고 상단 예를 들어, 좋아 아니지만, 일부 페이지는 다른를 작성했습니다 - 예. SCART input 1

"SCART 1"~5은 - allmost 좋아, 그것은 일치 "SCART 입력 1"하지만 전체 인덱스가 HDMI input 1 SCART input 1과 같은 경우는 토큰을 다음과 일치 "HDMI 입력 1SCART 입력 1"

내가 원하는 것 :

키워드 순서 e를 보존하고 싶습니다. 내가 slop을 지정하면 ven. 내가 "SCART 1"~5을 묻는다면이 "HDMI 입력 1 SCART 입력 "처럼 SCART과 일치하는 내용이 1과 일치합니다.

내가 Solr으로 달성 할 수 있는지, 내가 대안에 대해 공개했는지 모르겠다.

+0

어구 쿼리는 어떻습니까? 따옴표 안에 키워드? – sidgate

+0

@sidgate 구문 쿼리가 (모두) 괜찮습니다. 문제는 가끔 용어가 인접 해 있지 않기 때문에 슬롭 거리를 지정해야하는 이유입니다. – user2248674

+0

좋아요 ... 그렇다면 [슬롭 지정] (http://lucene.apache.org/core/4_0_0/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#Proximity_Searches) 쿼리가 작업을 수행하지 않습니까? – femtoRgon

답변

1

표준 쿼리 파서는이를 지원하는 데 필요한 유연성을 제공하지 않습니다. 나는 이것을 처리하는 edismax도 믿지 않는다. 따라서, 당신은 SpanQueries를 사용하여 쿼리를 직접 구성해야합니다 원하는 경우

SpanQuery[] clauses = new SpanQuery[2]; 
clauses[0] = new SpanTermQuery(new Term("field", "scart")); 
clauses[1] = new SpanTermQuery(new Term("field", "1")); 
Query query = new SpanNearQuery(clauses, 5, true); 

또한, 다른 쿼리 파서를 사용할 수 있습니다. SurroundQueryParser은 다음과 같이 이러한 종류의 스팬을 처리합니다.

5N(SCART, 1)