Lucene과 관련된이 질문이 있습니다.Lucene 와일드 카드 쿼리
양식이있어서 텍스트를 가져 와서 여러 필드에서 전체 텍스트 검색을 수행하려고합니다. 입력에서 "textToLook"이라는 텍스트를 얻는다 고 가정합니다.
나는 Lucene Analyzer에 몇 가지 필터가 있습니다. 그 중 하나는 lowerCaseFilter이므로 색인을 만들면 단어가 소문자로 변환됩니다.
나는 루씬 쿼리는 이런 일이 ('textToLook은'지금 'texttolook'이다) 될 수 있도록 두 개의 필드 필드 1과 FIELD2으로 검색 할 상상 : 내가 뭔가를 내 수업에서
field1: texttolook* field2:texttolook*
이렇게하면 쿼리를 만들 수 있습니다. 와일드 카드가 없을 때 작동합니다.
field1: texttolook field2:texttolook
을하지만 텍스트를 설정하면 "textToLook는 *"나는 인덱스로 제대로 찾을 수 없을 것이다
field1: textToLook* field2:textToLook*
를 얻을 :이 코드
String text = "textToLook";
String[] fields = {"field1", "field2"};
//analyser is the same as the one used for indexing
Analyzer analyzer = fullTextEntityManager.getSearchFactory().getAnalyzer("customAnalyzer");
MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, analyzer);
org.apache.lucene.search.Query queryTextoLibre = parser.parse(text);
쿼리가 될 것이다 소문자입니다.
나는 루씬 웹 사이트에서 읽은이 :
"등의 형태소로 운영 및 lowercasing을 수행하는 구성 요소 인 분석기, 를 통해 전달되지 않습니다 와일드 카드, 접두어 및 퍼지 쿼리를"
문제는 대소 문자를 구분하지 않으므로 문제를 해결할 수 없습니다. 분석기에는 단어의 일부 접미어를 제거하는 다른 필드가 있습니다.
필자는 필자의 분석기 필터를 통과 한 후 텍스트가 어떻게 나타나는지를 알면 문제를 해결할 수 있다고 생각하고 "*"를 추가 한 다음 MultiFieldQueryParser를 사용하여 쿼리를 작성할 수 있습니다. 그래서이 예제에서 나는 "textToLower"를 얻었고이 필터들에 전달 된 후에 "texttolower"를 얻을 수있었습니다. 이 후에 나는 "textotolower *"를 만들 수 있었다.
그러나 모든 분석기의 필터를 통과 한 후 내 텍스트 변수의 값을 가져 오는 방법이 있습니까? 분석기의 모든 필터는 어떻게 얻을 수 있습니까? 이것이 가능한가?
감사
나는 이것을 이미 보았지만 문제를 해결하지 못했다. 소문자 필터보다 많은 필터가 있습니다. 내가 그 중 하나는 단어의 접미사를 제거 언급했듯이, 예를 들어 "changeable"로 색인을한다면 그것은 "변경"으로 색인이 될 것이므로 쿼리에서 "변경 사항"을 검색하면 단어의 루트 (" 변경 ")을 찾고"변경 * "을 찾으면이 단어들이 일치합니다. – Javi