2012-07-02 4 views
0

PHP (MySQL 백엔드)에서 프로토 타입 auction/listings 프로젝트를 작성하고 있습니다.keyphrases를 기반으로 PHP에서 MySQL을 검색

나는 목록 테이블 (목록)과 각 항목을 설명하는 여러 keyphrases가있는 keyphrase 테이블 (listings_keyphrases)이 있습니다. 각 목록에는 여러 개의 keyphrase (필요한만큼)가 있지만 각 keyphrase는 20 자로 제한됩니다.

따라서 listing_keyphrases에는 하나의 목록에 대해 6 개의 행이있을 수 있으며 각 행에는 서로 다른 키어제가 있습니다. listings_keyphrases 테이블의 키워드 구문이 순서가 지정됩니다. 검색 구문이와 정확히 일치하는 경우 (

  • 말씨 :

    1. 검색 특정 항목에
    2. 정렬 결과를 관련된 모든 핵심 문구가에 따라 :

      내가 검색 기능을 구현하려면 특정 키 프레이즈)

    3. 키 프레이즈 순서 (검색이 관련성이 높은 위치 1의 키 프레이즈와 일치하는 것으로 가정합니다.)

나는 MySQL의 FULLTEXT과 몇 가지 다른 옵션을 검토 한 결과지만 앞으로 가장 좋은 방법은 무엇 밖으로 일을하지 않았습니다. 어떤 아이디어?

답변

3

나는 다음과 같은 검색 엔진 중 하나를 시도 할 것입니다 :

http://sphinxsearch.com/

http://lucene.apache.org/solr/

는 잘 문서화하고 사용하기 쉬운 오픈 소스입니다.

+0

이것은 좋은 제안입니다. 작업에 더 적합한 소프트웨어를 사용하십시오. 나는 또한 매우 훌륭한 [elasticsearch] (http://www.elasticsearch.org/)를 믹스에 던지기를 원합니다. –

+0

[elasticsearch] (http://www.elasticsearch.org/)는 한 눈에 잘 보입니다. [xapian] (http://xapian.org/). 하지만 실제로 사용하지 않은 것을 제안하고 싶지는 않습니다. – aswyx

1

당신이 제공하는 정렬 결과 중 하나 때문에 검색 할 때 fulltext를 사용해야한다고 생각합니다. 검색 구문이 특정 keyphrase와 정확히 일치하는 경우. 전체 텍스트 검색을 사용하면 더 많은 점수를 얻을 수 있습니다.

두 번째 주문의 경우 관련 성을 대신 정의해야합니다 (전체 텍스트의 관련성 대신). mysql이 keyphrase를 검색 할 때 첫 번째인지 마지막인지 신경 쓰지 않는다. 삽입 keyphases의 순서가 중요하다면 전체 텍스트 검색의 관련성에 따라 결과를 정렬하고 ID_keyphrase (ID_keyphrase는 자동 변환)로 필드를 추가하거나 관련성을 나타 내기 위해 필드를 추가하거나 위치를 사용할 수 있습니다. 데이터 베이스).

예 :

Keyphrase_table 
----------- 
ID 
listing_table_id 
keyphrase 
relevance 

이와 당신이 할 수 있습니다 : ID와 ID로

1 1 keyphrase2 1 
2 1 keyphrase1 2 
3 2 keyphrase1 1 

목록 = 1이 2 keyphrase를 (keyphrase2 및 keyphrase1) 및 목록을 = 2 일이 keyphrase (keyphrase1)

전체 텍스트와 함께 "keyphrase1"을 검색하면 결과는 레코드 2와 3이됩니다. 두 결과는 모두 같기 때문에 fulltext와의 관련성은 동일하지만 if 검색 필드에 "관련성"이라는 새 필드를 추가하면 (Order by THE_RELEVANCE_OF_FULLTEXT DESC,relevance ASC) 레코드 3이 fulltext의 조건을 충족하고 결과가 가장 낮은 위치에 있기 때문에 첫 번째 레코드가됩니다.