나는 사용자가 전형적인 블로그/마이크로 블로그/포럼 유형의 게시물을 게시 할 수있는 웹 기반 응용 프로그램을 개발 중이고 우리가 가진 한 가지 문제점은 사용자가 자주 콘텐츠에 태그를 지정하지 않습니다. 태그는 여러 가지 이유로 앱에서 매우 중요하므로 사용자를 태깅 동작으로 유도하려고합니다.Java/MySQL/Hibernate 검색/Lucene 환경에서 태그 제안하기
우리는 해시 태그를 구현했는데 이것은 약간의 효과가있는 것으로 보이며이를 장려하기 위해 어떤 형태의 게임을 구현할 생각입니다.
위와 더불어 태그 제안 (기본적으로 StackOverflow의 기능)을 구현하려고합니다. 데이터베이스의 기존 태그를 기반으로 태그를 제안하고 일치하는 태그가없는 경우 "푸른 색"태그에 tf-idf 라이브러리 또는 기타 태그를 사용하는 것이 좋습니다.
는 사용자 유형으로 제시 태그의 종류 (즉, 키에를) 할 수있는 성능 관점에서 실현 가능성이 : 제 질문은 두 가지이다? 이것이 StackOverflow가 질문을 게시 할 때 수행하는 방법이며 우리는 이와 비슷한 것을 찾고 있다고 생각합니다. 아니면 사후 처리 (사용자가 이미 콘텐츠를 추가 한 후 태그를 제안한 후)를해야합니다.
줄임표 등을 제공하는 이러한 제안을 제공 할 수있는 도구/라이브러리가 있습니까? 아마도 동의어 일 수도 있습니다. 우리의 데이터는 현재 MySQL에 저장되어 있으며 Hibernate Search를 사용하기 때문에 Lucene 인덱스에도 저장됩니다 (현재 Hibernate 검색을 통해서만 이들과 직접 상호 작용하지는 않지만). 이 데이터를 다른 유형의 데이터 소스에 저장하면 상황에 도움이됩니다. (그들은 모두 한 번에 검색하지 않은하지만) 각 키 스트로크에 대한 검색을 수행
는
덕분에 @RandomMooCow가 도움이되었습니다. 나는 EnglishAnalyzer를 가지고 놀았지만 잘 작동하는 것처럼 보이지만 몇 가지 질문이 있습니다. 검색 용어가 줄기가있는 단어의 경우 정확한 일치를 반환하지 않는 것 같습니다. 예를 들어, "rock"과 "rocking"태그가 있고 "rocking"을 입력하면 쿼리는 "rock"만 반환합니다. 이것이 바람직한 행동입니까? – brent777
둘째, 조금 더 사용하는 알고리즘을 이해하고 싶습니다. 태그를 제안하기 전에 사용자가 입력 한 텍스트에 대해 사전 처리를 수행합니까? 또는 쿼리를 실행할 때마다 전체 텍스트를 검색어로 사용합니까? randomText는 사용자가 지금까지 입력 한 문자열 인 "randomText"문자열에서 lucene 쿼리의 모양은 무엇입니까? – brent777
"Hibernate Search in Action"에서 이것에 대해 좀 더 읽었고 인덱싱 할 때 @Field를 통해) 쿼리 할 때 분석기를 지정해야한다는 것을 깨달았습니다. 이전에는 쿼리 시간에만 수행했습니다. 이제이 쿼리가 변경되어 "로킹"이 반환됩니다. 이것이 내가 예상하고 필요로했던 것입니다.또한 퍼지 쿼리를 구현하여 오타를 처리했지만 표준 쿼리가 제안을 너무 많이 반환하는 경우에만 실행합니다. 그것은 StandardAnalyzer와 더 잘 작동하기 때문에 이것을 별도의 쿼리로 실행합니다. 또한 SynonymFilter를 사용하지 않기로 결정했습니다. – brent777