2009-07-06 1 views
4

PHP Zend Framework Search (Lucene 기반)를 사용하여 검색 색인을 만들었습니다. 검색은 구매/판매 웹 사이트를위한 것입니다.Zend Search (Lucene)를 사용하여 지정된 필드를 검색하는 방법을 제외하는 방법

내 검색 인덱스는 다음과 같은 필드가 포함

항목-ID (인덱싱되지 않은)
항목 제목 (텍스트)
아이템 설명 (UnStored)
아이템 태그 (텍스트)
항목 - 가격 (키워드)
판매자-ID (인덱싱되지 않은)
판매자 이름 (텍스트)

나는 사용자가 공업을 검색 할 예를 들어 항목을 검색하거나 이름으로 판매자를 검색하여 검색을 필터링 할 수 있습니다.

Lucene의 기본 검색 설정을 사용하여 검색을 수행하면 5 개의 항목 필드와 판매자 이름 필드를 모두 검색하게됩니다. 이것은 내가 원하는 일이 아닙니다. 내가 원하는 것은 사용자가 항목을 검색하거나 판매자 이름에 대해 드롭 다운 메뉴에서 선택해야하는 검색을 수행 할 때입니다.

판매자 이름 입력란을 무시하는 항목을 검색 할 때 검색어를 어떻게 알 수 있습니까? 판매자 이름을 검색 할 때 검색어 입력란에서 항목을 검색하지 않도록 검색 쿼리를 지정하려면 어떻게해야합니까? 아니면 판매자 이름에 대해 별도의 색인을 만드는 것이 더 좋습니까?

답변

6

현재 명시 적으로 방법이 없습니다. 은 Lucene의 쿼리 언어 필드를 검색하거나 Zend_Search_Lucene 쿼리 작성 API를 사용합니다.

그러나 어떤 필드가 일 경우을 쿼리에서 검색할지 명시 적으로 지정할 수 있습니다. 예제는 다음과 같습니다

seller-name: Joe McBob 

이 방법을 사용하는 경우, 당신은 명시 적으로 조회 할 어떤 필드 목록을해야합니다, 그 무엇을 검색 할 수 있습니다. 따라서 동일한 텍스트로 item-title 필드를 검색해야하는 경우 위의 정보를 다른 필드 이름과 함께 복제해야합니다. 예제는 다음과 같습니다 당신은 물론,뿐만 아니라, Zend_Search_Lucene가 제공하는 쿼리 작성 API를 통해이 모든 작업을 수행 할 수 있습니다

seller-name: Joe McBob OR item-title: JoeMcBob 

. manual에는 좋은 예가 몇 가지 있습니다.

여기서 주목할 가치가있는 점은 발견 한 것처럼 Zend_Search_Lucene은 기본적으로 모든 입력란을 검색합니다. 이것은 Java Lucene과 다른 점 중 하나입니다. Zend_Search_Lucene 클래스의 정적 메서드 setDefaultSearchField을 사용하여 쿼리 할 기본 필드를 설정할 수 있습니다.

+0

감사합니다. jason. 나는 그것이 내가해야 할 수도있는 것이라고 생각했다. 더 나은 솔루션이 있는지, 내 질문에 만족하는지 확인하기 위해 여기에 지식 기반을 두 번 확인하고 싶습니다! – justinl

관련 문제