需要对一些数据进行去掉重复处理,规则类似于,两条记录的名称和地址相似度很大,则认为是同样的,应该去掉当中的某一个。昨天晚上翻了lucene得书籍,想找找看有什么好的方法没有,最后决定尝试一下fuzzyquery,大早上的就写了一个,结果很让我莫名其妙!
代码如下:
public class FuzzyQueryTest {
public static void main(String[] args) {
RAMDirectory directory = new RAMDirectory();
try {
IndexWriter indexWriter = new IndexWriter(directory,
new MMAnalyzer(), true);
Document document1 = new Document();
Document document2 = new Document();
Document document3 = new Document();
Document document4 = new Document();
Field f1 = new Field("content", "北京科技大学", Field.Store.YES,
Field.Index.TOKENIZED);
Field f2 = new Field("content", "北京语言大学", Field.Store.YES,
Field.Index.TOKENIZED);
Field f3 = new Field("content", "中国科技大学", Field.Store.YES,
Field.Index.TOKENIZED);
Field f4 = new Field("content", "北京大学科技馆", Field.Store.YES,
Field.Index.TOKENIZED);
document1.add(f1);
document2.add(f2);
document3.add(f3);
document4.add(f4);
indexWriter.addDocument(document4);
indexWriter.addDocument(document3);
indexWriter.addDocument(document2);
indexWriter.addDocument(document1);
indexWriter.close();
// search
IndexSearcher indexSearcher = new IndexSearcher(directory);
Term term = new Term("content", "北京语言大学");
FuzzyQuery fuzzyQuery = new FuzzyQuery(term);
Hits hits = indexSearcher.search(fuzzyQuery);
for (int i = 0; i < hits.length(); i++) {
System.out.println(hits.doc(i));
System.out.println(hits.score(i));
Explanation explanation = indexSearcher.explain(fuzzyQuery, i);
System.out.println(explanation.toString());
System.out.println("-----------------");
}
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (LockObtainFailedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果是空,如果只是搜索大学或者北京,是有结果的。但是,怎么看这个结果都不能够满足我那个排重的需求阿!
各位,有什么好的建议!指导一下!
自己修正一下我自己提出的问题,我提出的问题实际上是比较两个字符的相似度。对于这个问题,doris给出的解释思路是使用lcss找到最大的匹配字符串。我正在考虑,找到最大字符串后,怎么通过某种机制来衡量和原来字符相似的评分!
分享到:
相关推荐
源码分析方面,`FuzzyQuery`类在Lucene的`org.apache.lucene.search`包下,其内部实现了模糊匹配的逻辑。`defaultMinSimilarity`和`defaultPrefixLength`是预设的默认值,可以根据实际应用的需求进行调整。此外,`...
在信息检索领域,FuzzyQuery 是一种非常重要的技术,它允许用户输入可能存在拼写错误或不精确的查询词,系统能够根据一定的相似度算法找出与查询词相近的文档。本项目"基于FuzzyQuery Lucene库的信息检索系统,Java...
在“FuzzyQuery2”这个案例中,开发者可能已经实现了上述的一种或多种模糊查询策略。具体实现可能包括以下步骤: 1. **关键词预处理**:去除空格、标点符号,对中文进行分词或转换为拼音。 2. **建立索引**:为了...
FuzzyQuery fq = new FuzzyQuery(new Term("name", "word1"), 0.8f, 1); ``` `0.8f`为相似度阈值,`1`表示编辑距离。 ##### 1.6 临近搜索查询 临近搜索可以在短语后加上符号`~`来控制两个词之间的最大距离。 例如,...
Lucene的`FuzzyQuery`允许设置相似度阈值,从而返回近似匹配的结果。 #### 范围搜索 范围搜索允许用户基于数值或日期字段限定搜索范围。例如,搜索价格在100到200之间的商品,或者查询某个日期区间内的记录。 总之...
在压缩包文件“FuzzyQuery”中,可能包含的源代码文件可能有`.java`、`.cpp`或`.py`等,分别对应Java、C++或Python等编程语言实现的模糊查询功能。源代码将展示如何构建Trie树、如何使用SQL查询以及可能的优化策略,...
FuzzyQuery允许设置一个最小相似度阈值,只有当查询词与索引项的相似度高于这个阈值时才会返回结果。 2. **PrefixQuery**:这种查询类型用于匹配以特定前缀开头的词。虽然不如FuzzyQuery灵活,但在某些情况下,如...
Fuzzy相关特征如`fuzz_qratio`和`fuzz_token_set_ratio`则是模糊匹配算法的应用,用于处理近似字符串匹配问题。 熵相关特征如`query_Entropy`表示查询的熵值,反映了信息的不确定性。转换率特征通过计算关键词的...
- **模糊查询(Fuzzy Query)**: 支持相似度查询,允许用户搜索拼写相近的词。 - **范围查询(Range Query)**: 用于查找位于某个范围内的值,如日期或数值范围。 - **分面搜索(Faceted Search)**: 用于分类和过滤...
例如,`FuzzyQuery` 类允许指定一个模糊度级别(通常用一个介于 0 和 1 之间的浮点数表示,值越小,模糊度越高)。此外,还可以使用 `PrefixQuery` 或 `WildcardQuery` 来处理部分匹配和通配符查询。 项目“Fuzzy-...
- **近似搜索**(Fuzzy Search):支持拼写纠错和相似度搜索。 - **范围搜索**(Range Queries):可用于日期、数字等类型的数据。 - **高亮显示**(Highlighting):在搜索结果中突出显示匹配的关键词。 - **分面...
1. 使用URL参数:`q=guide`,这会从URL查询字符串中读取所有查询参数。例如,以下查询会返回所有包含"guide"的文档: ```bash GET /bookdb_index/book/_search?q=guide ``` 2. 使用Search Lite API或完整的...
- **QueryParser**:用于解析用户输入的查询字符串并转换为查询对象(Query)。 - **IndexSearcher**:用于执行查询操作的类。 3. **全文搜索技术** - **布尔模型(Boolean Model)**:基于逻辑运算符的查询方法。 ...