문제

콘텐츠 페이지를 관리하는 호스팅 응용 프로그램이 있습니다. 각 페이지에는 여러 개의 사용자 정의 필드와 일부 표준 필드 (타임 스탬프, 사용자 이름, 사용자 이메일 등)가있을 수 있습니다.

시스템을 사용하여 수백 개의 다른 사이트를 사용하면 필터링/검색을 처리하는 효율적인 방법은 무엇입니까? 좁히고 싶은 그리드보기를 상상하십시오. 특정 필드 (userID, 날짜)를 필터링하거나 전체 텍스트 검색을 입력 할 수 있습니다.

예를 들어, "UserID 10에서 시작한 모든 페이지"는 MySQL 데이터베이스에 대한 매우 빠른 쿼리입니다. 그러나 "userID가 10이고 [일부 검색 쿼리] 일치하는 사용자가 시작한 모든 페이지가 데이터베이스에 맞지 않으므로 Lucene과 같은 검색 엔진에 적합합니다.

기본적으로 다른 큰 사이트가 어떻게 이런 일을하는지 궁금합니다. 모든 유형의 필터링에 대해 검색 엔진을 100% 사용합니까? 데이터베이스 쿼리를 검색 엔진과 혼합합니까?

우리가 사용하는 경우 검색 엔진, 새/업데이트 된 개체가 검색 인덱스에 나타나는 데 걸리는 지연 시간에 문제가 있습니다. 즉, 인덱스를 업데이트하는 것이 현명하지 않다는 것을 읽었습니다. 즉시, 대신 배치로 수행합니다. 이것이 5 분마다 의미하더라도, 간단한 페이지 목록을 볼 때 최근에 추가 된 페이지가 즉시 나열되지 않으면 사용자가 혼란스러워집니다 ( "카테고리 : 5"의 검색 쿼리).

우리는 MySQL을 사용하고 있으며 검색을 위해 Lucene을 면밀히 검토했습니다. 내가 모르는 다른 기술이 있습니까?

내 생각은 MySQL을 사용하여 기본 필드를 필터링하는 간단한 필터링 페이지를 제공하는 것입니다. 그런 다음 Google과 유사한 결과를 제공하는 별도의 풀 텍스트 검색 페이지를 제공합니다. 이것이 유일한 방법입니까?

도움이 되었습니까?

해결책

Solr 또는 Grassyknoll은 둘 다 Lucene에 약간 더 추상적 인 인터페이스를 제공합니다.

즉, 그렇습니다. 주로 콘텐츠 중심 사이트 인 경우 데이터를 전체 텍스트 검색을 제공하는 경우와 같은 기능이 있습니다. MySQL의 전체 텍스트 인덱스는 완벽하지는 않지만 그 중간에 수용 가능한 자리 표시 자일 수 있습니다.

루센 인덱스를 작성한다고 가정하면 루센 문서를 관계형 개체에 연결하는 것이 매우 간단합니다. 단순히 인덱스 시간에 문서에 저장된 속성을 추가합니다 (이 속성은 URL, ID, Guid 등이 될 수 있습니다. 그렇다면 검색은 2가됩니다. 위상 시스템 : 1) Lucene Indexies에 대한 쿼리 (제목과 같은 간단한 결과 표시) 2) Key의 관계 상점에서 개체에 대한 자세한 정보를 얻으십시오.

Lucene에서 문서의 인스턴스화는 비교적 비싸기 때문에 관계형 대상의 완전한 클론과는 달리 Lucene 지수에 검색 된 필드 만 저장하려고합니다.

다른 팁

MySQL을 그렇게 쉽게 쓰지 마십시오!

데이터베이스를 사용하여 구현하십시오. 예를 들어, Where-Clase 또는 무엇이든 'Like'가있는 선택.

프로파일을 프로파일하고 필요한 경우 인덱스를 추가하십시오. 베타를 롤아웃하므로 사용자의 실제 데이터 패턴에서 실수를 얻으십시오. 모든 열이 똑같이 질문을받을 수있는 것은 아닙니다.

성능이 빨라지면 다른 옵션을 고려할 때. SQL, 데이터베이스, 데이터베이스가 실행중인 컴퓨터 및 마지막으로 다른 기술 스택을 사용하는 것을 고려할 수 있습니다 ...

MySQL 또는 PostgreSQL을 사용하려는 경우 Sphinx입니다.http://www.sphinxsearch.com/

우리는 같은 문제를 겪고 있으며 가능한 솔루션으로 스핑크스와 루센을 고려하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top