2014-02-23 3 views
4

Lucene.NET을 사용하여 용어 벡터를 저장하고 쿼리하고 싶습니다. 그러나 용어 벡터가 문서에서 생성되는 것을 원하지 않습니다. 대신 용어/토큰의 위치 나 오프셋없이 용어 벡터를 직접 작성하고 업데이트 할 수 있기를 원합니다.용어 빈도/용어 벡터를 직접 수정할 수 있습니까?

해결 방법은 텍스트를

foo, foo, foo, bar

을 생성 용어 벡터

foo: 3; bar: 1

에서 용어 벡터, 즉의 텍스트를 생성하고 루씬의 색인 텍스트를 수 있도록하는 것입니다.

foo, foo, foo, bar, bar

로 변경, 내가 2에 바의 용어 주파수를 업데이트 할 경우에, 나는 저장된 텍스트를 얻을 수 (또는 내가 그것을 저장하지 않는 경우, 기존의 용어 벡터에서 발생) 인덱스의 해당. 서를 갱신하십시오.

이렇게 간단한 작업을 수행하는 데 비용이 많이 듭니다. 분명히 이것은 유스 케이스가 아니며, Lucene은 사용하기 위해 만들어졌습니다. 그래도 Lucene의 힘을 질의 등에 사용할 수 있기를 원합니다.

문서의 용어 벡터를 직접 작성하는 방법이 있습니까? 아니면 다른 좋은 아이디어가 있습니까?

+1

안녕하세요, 저는 같은 질문을 가지고 있습니다. 아직 해결책을 찾았습니까? – eroy4u

+0

@ eroy4u : 사실, 아래에 내 대답을 좀 봐 ... – Marc

+0

Elasticsearch와 같은 질문 -이 기능은 정말 유용하다고 생각합니다. –

답변

2

내 질문에 말했듯이, Lucene은 용어 벡터를 직접 저장하고 조작하기위한 것이 아닙니다.

  1. 는 관련 용어 벡터를
  2. 업데이트 문서
  3. 의 따라 필드를 나타내는 문서를 검색 : 초기 접근 방식은 용어 벡터를 업데이트하는 프로세스에 관련하여 적어도 갈 더 많거나 적은 방법입니다
  4. 색인화 나는 전체 문서를 다시 인덱싱없이 벡터에서 단일 용어 주파수를 업데이트 할 수있는 방법을 발견하지 않았습니다

문서 (Delete, then Add는 루씬에 Update와 동일). 질문에 설명 된 방법의

한 개선 용어 주파수 쌍으로 termvector 인코딩하는 것입니다

대신

을 foo는 foo는 foo는 바

필드 내용이 할 수있는 다음과 같이 작성하십시오 :

foo : 3; 막대 : 1;

그런 다음 이러한 토큰 하나 하나를 읽는 사용자 정의 TokenFilter를 작성하고 다음 용어를 n 시간을 반환 할 수 있습니다. 이렇게하면 성능은 향상되지 않지만 용어 벡터를 쉽게 처리 할 수 ​​있습니다.커스텀 토큰 필터와 애널라이저에 익숙하지 않다면 아마이 접근법을 사용하는 것이 가치가 없기 때문에 이미 질문에서 제안한 순진한 버전을 고수 할 것입니다.

관련 문제