2012-09-04 1 views
3

사용자가 solr 인덱스에서 매우 공통적 인 키워드를 검색하면 유용한 레코드를 반환 할 수 있기를 원합니다. 예 : education.매우 일반적인 키워드 검색을 처리하는 방법

이 경우 레코드의 99 % 가까이에서 해당 단어가 포함됩니다. 따라서이 단어 나 유사어를 검색하는 데 오랜 시간이 걸립니다.

이것은 에 대한 soler입니다. ColdFusion에 있지만 솔직히 해결할 수있는 솔루션이 열려 있습니다.

지금 당장 나는 불용어 목록을 작성하고 그러한 검색이 완전히 이루어지지 않도록 할 생각입니다.

+1

CFSEARCH가 결과 100 개가 아닌 모든 결과를 얻으려고하기 때문에 검색 시간이 오래 걸린다고 가정합니다. CFSEARCH를 사용하지 않고 대신 Solr의 웹 서비스를 사용하면이 문제를 피할 수 있습니다. 자세한 내용은 http://www.thefaberfamily.org/search-smith/coldfusion-solr-tutorial/을 참조하십시오. –

+0

잘 모르겠지만 CFSEARCH 태그에는 'maxrows' 속성도 있습니다. 검색에 걸리는 시간이 문제라면 해결해야합니다. –

+1

사람들이 실제로 "교육"을 검색합니까? 이력서에 색인을 달고 "교육", "경험"또는 "객관적"이라는 단어가 모두 포함 된 대부분의 이력서는 단어를 잡음으로 만듭니다. –

답변

2

검색 결과가 오래 걸릴 경우 결과의 수를 제한하지 않을 수 있습니다. <cfsearch> 태그에는 maxrows 속성과 startrow 속성이 있으며 데이터를 제한하거나 페이지 매김하는 데 사용할 수 있습니다. 또는, 당신은 <cfhttp> 호출을 통해 직접 SOLR의 웹 서비스를 호출 할 수 있습니다

<cfhttp url="http://localhost:8983/solr/<collection_name>/select/?q=<searchterm>&fl=*,score&rows=100&wt=json" /> 

SOLR는 기본적으로 10 개의 행을 반환합니다; rows 매개 변수를 사용하여이를 변경할 수 있습니다. start 매개 변수도 사용할 수 있습니다 (Solr은 1 대신에 0으로 계산되기 시작합니다). 나는이 솔루션이 더 융통성이 있다고 생각합니다. 특히 CF 9를 사용하는 경우에는 점수 이외의 필드에서 정렬하는 동안 페이지 매김을 할 수 있으므로 특히 그렇습니다.

당신은 여기에서 자세한 내용을 찾을 수 있습니다 http://www.thefaberfamily.org/search-smith/coldfusion-solr-tutorial/

+0

좋아요, 지금 쿼리 결과를 사용하여 쿼리와 검색 결과를 결합하므로이 작업을 더 잘 수행 할 수있는 방법을 찾아야합니다. –

+0

당신은'queryNew()'를 사용하여 새로운 쿼리를 생성하고 JSON 결과를 deserialize하여 결과 구조체로 채우는 것으로 비슷한 것을 할 수 있습니다. –

+0

주요 이슈는 다른 쿼리의 필드 인 인기도를 기준으로 정렬하고 첫 번째 x 레코드 만 가져올 때 인기를 기준으로 정렬 할 때 가장 큰 레코드를 얻지 못할 수도 있습니다. 검색 결과에서 제외 –

0

상당히 일반적인 하나의 용어에서 사용자를 검색 한 다음 결과를 제한하고 너무 많은 일치가 있다고 사용자에게 조언을해야하는 경우 .

보다 일반적인 경우에는 2 단계 (적어도) 접근 방식을 수행하고자합니다. 검색 용어를 사용하여 '공통성'을 결정하는 검색을 수행하십시오. 가장 일반적인 용어를 먼저 필터링하고 가장 일반적인 용어를 마지막으로 필터링하려고합니다.

예를 들어, 사용자는 serendipitous education을 검색합니다. serendipitous에 11 개의 일치 항목이 있고 education에 900000 일치 항목이 있음을 나타냅니다. 따라서 serendipitous 필터를 먼저 적용하면 11 개의 일치 항목이 생성됩니다. 그런 다음 education 필터를 적용하면 7 개가 일치합니다.

빠른 검색의 핵심은 인덱싱 및 사전 계산 된 통계입니다. 이와 같은 통계가 있으면 최적화 된 접근 방식을 동적으로 만들 수 있습니다.