내가 싸우고있는 것을 더 잘 나타내도록 내 원래 질문을 편집하십시오. 여기 내 문제 도메인입니다. 저는 소프트웨어 회사의 테스트 부서에 있습니다. 우리는 그루비 스크립트를 작성하여 소프트웨어를 테스트합니다. 소프트웨어는 로그하는 경고 및 오류 메시지에 대한 키 값 쌍이 들어있는 특성 파일을 사용합니다.Lucene 4.8.1 일치하는 항목이 없습니다.
내가하고 싶은 일은 내 Groovy 스크립트 (그 중 300+ 이상)를 인덱싱 한 다음 내 등록 정보 파일을 반복하고 어떤 스크립트가 특정 오류 메시지를 확인하는지 확인하는 것입니다. 속성의
예를 들어 파일 :
이B_C_Patched=Patched
이 단지 하나의 문자열 쌍이며, 그 중 3000 이상이있다.
이import org.apache.lucene.analysis.Analyzer
import org.apache.lucene.analysis.core.WhitespaceAnalyzer
import org.apache.lucene.document.Document
import org.apache.lucene.document.Field
import org.apache.lucene.document.StringField
import org.apache.lucene.index.IndexReader
import org.apache.lucene.index.IndexWriter
import org.apache.lucene.index.IndexWriterConfig
import org.apache.lucene.index.Term
import org.apache.lucene.search.IndexSearcher
import org.apache.lucene.search.ScoreDoc
import org.apache.lucene.search.TermQuery
import org.apache.lucene.store.RAMDirectory
import org.apache.lucene.util.Version
import org.apache.lucene.search.RegexpQuery
public class Indexer {
private final Config config
private final String SCRIPT_PATH = "path"
private final String CONTENTS = "contents"
//Store the index in memory
private final RAMDirectory idx = new RAMDirectory()
def Analyzer analyzer = new WhitespaceAnalyzer(Version.LUCENE_48)
public Indexer(Config config) {
this.config = config;
}
//Save index to Memory
public indexScripts() {
IndexWriterConfig idxConfig = new IndexWriterConfig(Version.LUCENE_48, analyzer)
IndexWriter iwriter = new IndexWriter(idx, idxConfig)
//Traverse the folder and index both the file path and its contents
config.getScriptFolder().traverse { file ->
if (file.isFile()) {
Document doc = new Document()
String path = file.name
Field pathField = new StringField(SCRIPT_PATH, path, Field.Store.YES)
doc.add(pathField)
String content = file.text
doc.add(new StringField(CONTENTS, content, Field.Store.YES))
println("Added file: " + file.name)
iwriter.addDocument(doc)
}
}
iwriter.close()
}
public ArrayList<String> searchIndex(String checkFor, boolean regEx = false) {
//Open a reader to the index in memory
def IndexReader indexReader = IndexReader.open(idx)
def IndexSearcher indexSearcher = new IndexSearcher(indexReader)
def ArrayList<String> results = new ArrayList<String>()
//Parse the query according to the string provided
if (!regEx) {
TermQuery query = new TermQuery(new Term(CONTENTS, checkFor))
println query
ScoreDoc[] hits = indexSearcher.search(query, 400).scoreDocs
if (hits.length > 0) {
for (int i = 0; i < hits.length; i++) {
def Document hitDoc = indexSearcher.doc(hits[i].doc)
results.add(hitDoc.get(SCRIPT_PATH))
return results
}
}
results = []
return results
} else {
RegexpQuery query = new RegexpQuery(new Term(checkFor))
ScoreDoc[] hits = indexSearcher.search(query, null, 400).scoreDocs
if (hits.size() != null) {
for (int i = 0; i < hits.length; i++) {
def Document hitDoc = indexSearcher.doc(hits[i].doc)
results.add(hitDoc.get(SCRIPT_PATH))
return results
}
}
results = []
return results
}
indexReader.close()
}
}
위의 코드는 나에게 0 결과를 제공합니다 :
다음은 I가 그렇게 작성 인덱서 클래스입니다. 문자열의 B_C_Patched 부분을 정확히 일치 시켜서 "="에서 문자열을 분리하고 첫 번째 부분을 checkFor 변수로 저장합니다.
피곤 다른 분석기 쿼리 파서를 가지고 모든
도와주세요 0을 반환)
입력 해 주셔서 감사 드리며 다시 신고 해주세요. – Ferdi
다시 thx 피드백에 대해,하지만 정말 필요한 것은 "B_C_Patched = File where patched"와 같이 키 값 쌍으로 문자열을 분할하지 않도록 색인을 생성하는 것입니다. 그래서 Field.index.NOT_ANALYZED가있는 indixing 부분에서 키워드 분석기를 사용했지만 아직 결과가 없습니다. 색인 부분에서 잘못된 분석기를 사용하고 있습니까? – Ferdi
Sry가 위의 코멘트에서 언급하는 것을 잊어 버렸습니다. 정확한 일치를 원합니다 – Ferdi