我知道可能使用Lucene和Solr,但是有没有简单的Java库只是做模糊的全文搜索部分,例如:
SomeScore score = fuzzyFullTextSearch(String text, String searchTerm, int maxDistance)
其中''得分''确定度量,找到(模糊)searchTerm的频率以及它与原始searchTerm的相似程度。
我之所以不使用Lucene或类似产品,是因为我的用例很笨,我只需要搜索一次。使用Lucene的FuzzyQuery的编辑的maxDistance也只有2,这对我的特殊用例来说还不够好。
是否有可以实现的轻量级库?如上所示?
答案 0 :(得分:1)
像往常一样,Apache Commons来救援。
org.apache.commons.lang3.StringUtils 有很多方法可以获取 fuzzyDistance , levenshteinDistance 以及一些更复杂的指标
所以,天真的伪代码将是这样的:
split the text into tokens by spaces, commas, etc.
for each token
calcDistanceBetweenTokenAndSearchTerm
getSumScore // or avg or whatever
另一种方法可能是使用 commons-text org.apache.commons.text.similarity.FuzzyScore ,它能够计算两个字符串之间的距离,但是当然,很大程度上取决于具体要求。
我并不是说这是对可能答案的全面报道,但你可以尝试一下。