如何在Hibernate Search 5.5.2 / Apache Lucene 5.4.x中处理停用词?
停用詞,例如[“ a”,“ an”,“ and”,“ are”,“ as”,“ at”,“ be”,“ but”,“ by”,“ for”,“ if”,“在”,“成”,“是”,“它”,“不”,“不”,“的”,“在”,“或”,“這樣”,“那個”,“那個”,“他們的” ,“當時”,“那里”,“這些”,“它們”,“此”,“至”,“是”,“將”,“具有”]以及它們在術語或數據庫或文件中的存在被lucene索引/搜索可能導致以下任何情況:
在索引和搜索過程中解決此問題或處理它們的方法如下。 如果您使用的是Hibernate Search 5.5.2,而后者又使用的是Apache Lucene 5.3.x / 5.4.x,則此處說明的方法特別適用。
1.定義自定義分析器,改編自標準分析器
您只需包含兩個過濾器-“ LowerCaseFilterFactory”和“ StandardFilterFactory”作為Tokenizer定義的一部分。 我們此處未包括的過濾器工廠是“ StopFilter”。 這樣可以將停用詞視為其他普通英語詞,并將它們編入索引。
@Entity @Indexed @Table(name="table_name", catalog="catalog_name") @AnalyzerDef(name = "FedexTextAnalyzer",tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class), filters = {@TokenFilterDef(factory = LowerCaseFilterFactory.class),@TokenFilterDef(factory = StandardFilterFactory.class) })2.用相關注釋標記字段(@Field上的@Analyzer)
連同每個實體或表的列字段上的@Field批注一起,聲明我們上面定義的分析器。
@Column(name="Fedex_cs_product_name", nullable=false, length=100) @Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO, analyzer=@Analyzer(definition = "FedexTextAnalyzer")) public String getFedexCsItemName() {return this.FedexCsItemName; }3.使用WhitespaceAnalyzer進行查詢,以便默認情況下對停用詞進行“處理”
盡管官方文檔說如果我們通過將Stop Words的參數作為CharArraySet傳入來使用“ StandardAnalyzer” 。 EMPTY_SET我發現查詢仍然無法檢索任何結果。 在與盧克一起進行分析時,我發現對于諸如“面向初學者的計算機科學書籍”之類的查詢,“ for”被忽略了。 奇怪! 我用WhitespaceAnalyzer替換了它,發現它適用于所有“停止詞”和所有“案例”。
我發現以上是解決此問題的最佳/最小方法。 此外,我們的質量檢查已驗證了它適用于所有“停止詞”案例! 希望這對您有所幫助。
翻譯自: https://www.javacodegeeks.com/2016/04/handle-stop-words-hibernate-search-5-5-2-apache-lucene-5-4-x.html
總結
以上是生活随笔為你收集整理的如何在Hibernate Search 5.5.2 / Apache Lucene 5.4.x中处理停用词?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: esim是什么意思(esim是什么意思?
- 下一篇: 在WildFly的REST Web服务中