2012-05-07 4 views
0

Drupal 모듈에서 프로그래밍 방식으로 apachesolr 쿼리를 생성하고 일부 측면에서 성공했지만 다른 사람들과 여전히 고심하고 있습니다.Apachesolr 쿼리 - 필드의 텍스트로 필터링

지금까지, 나는 다음과 같은 코드를 필터링 할 조건에 따라 결과를 특정 텍스트를 검색 할 수 있습니다 쿼리를 구성하고 제한 할 수있었습니다 :

$subquery_region->addFilter('tid', $term->tid); 
$query->addFilterSubQuery($subquery_region, 'OR', 'AND'); 

내가하고 싶은 무엇 노드에서 특정 필드 내의 특정 텍스트를 찾기위한 필터를 추가하여 검색 범위를 좁힐 수 있습니다. 누구든지이 일을 할 수 있었습니까?

나는 온라인 연구 봤는데 같은 주요 검색에 추가 하위 쿼리에이를 주요 검색 쿼리

$query->addParam('fl', 'ss_my_field'); 
$query->addFilter("ss_my_field", "field_substring_to_search_for"); 

에 직접 필터를 추가뿐만 아니라, 파괴 등의 다른 방법을 많이 시도 검색어

$subquery_test = apachesolr_drupal_query("Test"); 
$subquery_test->addParam('fl', 'ss_my_field'); 
$subquery_test->addFilter("ss_my_field", "field_substring_to_search_for"); 
$query->addFilterSubQuery($subquery_test, 'OR', 'AND'); 

그러나 이들 중 어느 것도 작동하지 않습니다. 비록 필터로 추가 할 필드에 하위 문자열이 있고 인덱스가 작성 되었음에도 불구하고 빈 세트를 반환합니다. apacheorl 뷰 모듈을 통해 검색 색인이 해당 필드로 채워지고 하위 문자열이 있음을 확인할 수 있습니다.

구문이나 쿼리 작성 방법에 문제가 있습니까?

특정 필드 내에서 텍스트를 검색하기위한 필터를 추가하는 방법을 알고 있다면 공유하십시오! 그것은 심지어 addFilter 함수로 수행되지 않을 수도 있습니다. 그러나 그것은 제가 지금까지 시도해 온 것입니다. 감사합니다.

답변

3

먼저 특정 필드에 대한 색인을 만들어야합니다.

function hook_apachesolr_update_index(&$document, $node) { 
    $document->ss_your_field_name = $node->your_field_name; 
} 

여기서 ss_ *는 패턴입니다.
ss_ * -> 문자열
IS_ * -> 정수
im_ * -> 정수, 다중 값 그 후

당신은
1. 인덱스 삭제 - 관리자/설정/apachesolr/인덱스
2 . 내용
3. 실행 크론
4. 당신이 만든 필터 다시 인덱스 - 관리/보고서/apachesolr/인덱스 그런

, 당신은 필터

,369을 추가 할 수 있습니다
$query->addFilter("ss_your_field_name", "value"); 

희망이 도움이 될 것입니다.

+0

램, 지금까지 도움을 주셔서 감사합니다. 첫 번째 부분은 아름답게 작동했으며 내 필드가 색인에 추가 된 것을 볼 수 있습니다. 그러나 설명한대로 addFilter() 함수를 사용하여 추가하면 아무 것도 반환하지 않습니다. 형식에 대한 다른 아이디어. 나는 지금까지 시도한 모든 것을 포함하도록 내 질문을 편집 중입니다 ... –

0
function hook_apachesolr_modify_query(&$query, &$params, $caller){ 
    $subquery = apachesolr_drupal_query(); 
    $subquery->add_filter("ss_my_field", "field_substring_to_search_for"); 
    $query->add_subquery($subquery, "AND"); 
} 
+0

고마워요, 램. 그게 내 질문에 내 코드는 드루팔 (Drupal 7) 버전의 기능을 제외하고 내가 뭘하고 있었는지 정확히.그것은 여전히 ​​나를 위해 일하는 100 %는 아니지만, 확실히 나를 가까이에 있기 때문에 첫 번째 대답을 +1했습니다. 다시 한 번 감사드립니다! –