私はこの問題についてお詫びしますが、私はちょっと困惑しています。で開始するluceneのブール論理の正しい使い方
は、私は、アドレスオブジェクトのセットを持っている、と私は(擬似コードで)基本的に私は戻って持って帰りたいと思うこの
SELECT
WHERE
Fuzzy(addr1, "address line 1) // = true
AND
(Fuzzy(addr2, "address line 2") OR
Fuzzy(addrcity, "address city") OR
//all the other address fields
)
ようになり、クエリと関連するものを見つけようとしています少なくともアドレス行1が大まかに一致するすべてのエンティティと、アドレスの他の部分の1つにもファジー一致があります。
私はデータはこのクエリ経由であることを確認しました:正しいすべてのフィールドを持つドキュメントを返し
Query toRun = new FuzzyQuery(new Term("addr1", getLineOne()));
を。
私のコードは以下の通りです:
public List<Address> search() {
List<Address> results = new ArrayList<>();
BooleanQuery.Builder queryBuilder = new BooleanQuery.Builder();
queryBuilder.setMinimumNumberShouldMatch(2);
BooleanQuery.Builder subQueryBuilder = new BooleanQuery.Builder();
subQueryBuilder.setMinimumNumberShouldMatch(1);
if(!getLineOne().equals("")) {
Query query = new FuzzyQuery(new Term("addr1", getLineOne()));
queryBuilder.add(query, BooleanClause.Occur.MUST);
}
if(!getLineTwo().equals("")) {
Query query = new FuzzyQuery(new Term("addr2", getLineTwo()));
subQueryBuilder.add(query, BooleanClause.Occur.SHOULD);
}
if(!getCity().equals("")) {
Query query = new FuzzyQuery(new Term("addrcity", getCity()));
subQueryBuilder.add(query, BooleanClause.Occur.SHOULD);
}
if(!getCounty().equals("")) {
Query query = new FuzzyQuery(new Term("addrcounty", getCounty()));
subQueryBuilder.add(query, BooleanClause.Occur.SHOULD);
}
if(!getCountry().equals("")) {
Query query = new FuzzyQuery(new Term("addrcountry", getCountry()));
subQueryBuilder.add(query, BooleanClause.Occur.SHOULD);
}
if(!getPostcode().equals("")) {
Query query = new FuzzyQuery(new Term("addrpostcode", getPostcode()));
subQueryBuilder.add(query, BooleanClause.Occur.SHOULD);
}
queryBuilder.add(subQueryBuilder.build(), BooleanClause.Occur.MUST);
try {
Query toRun = queryBuilder.build();
List<Document> searchResults = SearchEngine.getInstance(SEARCH_ENGINE)
.performSearch(toRun, 50);
searchResults.forEach(result -> {
results.add(new Address(result));
});
} catch (IOException e) {
e.printStackTrace();
}
return results;
}
オブジェクトはライン1、ライン2と国テキスト形式でこのようなクエリが供給されたときにこれは、生産:
(+ addr1:アドレス行1〜2 +((addr2:アドレス行2〜2 addrcountry:romania〜2)〜1))〜2
上記のように何も返されません。
ここで私の論理は間違っていますか?
Ahh、それはかなり意味があります。ありがとうございました。私はそれが、少なくともブーリアンのうちどれだけ多くが真実であるべきかということを意味していると思ったが、それは論理的である –