mirror of
https://github.com/MarginaliaSearch/MarginaliaSearch.git
synced 2025-02-23 21:18:58 +00:00
Fetch more browse:domain-results.
This commit is contained in:
parent
d329106450
commit
e7623010db
@ -16,6 +16,8 @@ import java.util.Optional;
|
|||||||
public interface EdgeDataStoreDao {
|
public interface EdgeDataStoreDao {
|
||||||
EdgeId<EdgeDomain> getDomainId(EdgeDomain domain);
|
EdgeId<EdgeDomain> getDomainId(EdgeDomain domain);
|
||||||
|
|
||||||
|
List<BrowseResult> getDomainNeighborsAdjacentCosine(EdgeId<EdgeDomain> domainId, EdgeDomainBlacklist blacklist, int count);
|
||||||
|
|
||||||
List<BrowseResult> getDomainNeighborsAdjacent(EdgeId<EdgeDomain> domainId, EdgeDomainBlacklist backlist, int count);
|
List<BrowseResult> getDomainNeighborsAdjacent(EdgeId<EdgeDomain> domainId, EdgeDomainBlacklist backlist, int count);
|
||||||
|
|
||||||
List<BrowseResult> getRandomDomains(int count, EdgeDomainBlacklist backlist, int set);
|
List<BrowseResult> getRandomDomains(int count, EdgeDomainBlacklist backlist, int set);
|
||||||
|
@ -177,12 +177,6 @@ public class EdgeDataStoreDaoImpl implements EdgeDataStoreDao {
|
|||||||
public List<BrowseResult> getDomainNeighborsAdjacent(EdgeId<EdgeDomain> domainId, EdgeDomainBlacklist blacklist, int count) {
|
public List<BrowseResult> getDomainNeighborsAdjacent(EdgeId<EdgeDomain> domainId, EdgeDomainBlacklist blacklist, int count) {
|
||||||
final Set<BrowseResult> domains = new HashSet<>(count*3);
|
final Set<BrowseResult> domains = new HashSet<>(count*3);
|
||||||
|
|
||||||
domains.addAll(getDomainNeighborsAdjacentCosine(domainId, blacklist, count));
|
|
||||||
|
|
||||||
if (domains.size() >= count) {
|
|
||||||
return new ArrayList<>(domains);
|
|
||||||
}
|
|
||||||
|
|
||||||
final String q = """
|
final String q = """
|
||||||
SELECT EC_DOMAIN.ID AS NEIGHBOR_ID, DOMAIN_NAME, COUNT(*) AS CNT
|
SELECT EC_DOMAIN.ID AS NEIGHBOR_ID, DOMAIN_NAME, COUNT(*) AS CNT
|
||||||
FROM EC_DOMAIN_NEIGHBORS
|
FROM EC_DOMAIN_NEIGHBORS
|
||||||
|
@ -61,33 +61,16 @@ public class BrowseCommand implements SearchCommandInterface {
|
|||||||
String definePrefix = "browse:";
|
String definePrefix = "browse:";
|
||||||
String word = humanQuery.substring(definePrefix.length()).toLowerCase();
|
String word = humanQuery.substring(definePrefix.length()).toLowerCase();
|
||||||
|
|
||||||
Set<String> domainHashes = new HashSet<>();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if ("random".equals(word)) {
|
if ("random".equals(word)) {
|
||||||
var results = edgeDataStoreDao.getRandomDomains(25, blacklist, 0);
|
return getRandomEntries(0);
|
||||||
|
|
||||||
results.removeIf(browseResultCleaner.shouldRemoveResultPredicate());
|
|
||||||
|
|
||||||
return new BrowseResultSet(results);
|
|
||||||
}
|
}
|
||||||
if (word.startsWith("random:")) {
|
if (word.startsWith("random:")) {
|
||||||
int set = Integer.parseInt(word.split(":")[1]);
|
int set = Integer.parseInt(word.split(":")[1]);
|
||||||
|
return getRandomEntries(set);
|
||||||
var results = edgeDataStoreDao.getRandomDomains(25, blacklist, set);
|
|
||||||
|
|
||||||
results.removeIf(browseResultCleaner.shouldRemoveResultPredicate());
|
|
||||||
|
|
||||||
return new BrowseResultSet(results);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var domain = edgeDataStoreDao.getDomainId(new EdgeDomain(word));
|
return getRelatedEntries(word);
|
||||||
var neighbors = edgeDataStoreDao.getDomainNeighborsAdjacent(domain, blacklist, 45);
|
|
||||||
|
|
||||||
neighbors.removeIf(browseResultCleaner.shouldRemoveResultPredicate());
|
|
||||||
neighbors.sort(Comparator.comparing(BrowseResult::relatedness).reversed());
|
|
||||||
|
|
||||||
return new BrowseResultSet(neighbors);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
@ -96,4 +79,33 @@ public class BrowseCommand implements SearchCommandInterface {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private BrowseResultSet getRandomEntries(int set) {
|
||||||
|
var results = edgeDataStoreDao.getRandomDomains(25, blacklist, set);
|
||||||
|
|
||||||
|
results.removeIf(browseResultCleaner.shouldRemoveResultPredicate());
|
||||||
|
|
||||||
|
return new BrowseResultSet(results);
|
||||||
|
}
|
||||||
|
|
||||||
|
private BrowseResultSet getRelatedEntries(String word) {
|
||||||
|
var domain = edgeDataStoreDao.getDomainId(new EdgeDomain(word));
|
||||||
|
|
||||||
|
var neighbors = edgeDataStoreDao.getDomainNeighborsAdjacentCosine(domain, blacklist, 256);
|
||||||
|
neighbors.removeIf(browseResultCleaner.shouldRemoveResultPredicate());
|
||||||
|
|
||||||
|
// If the results are very few, supplement with the alternative shitty algorithm
|
||||||
|
if (neighbors.size() < 25) {
|
||||||
|
Set<BrowseResult> allNeighbors = new HashSet<>(neighbors);
|
||||||
|
allNeighbors.addAll(edgeDataStoreDao.getDomainNeighborsAdjacent(domain, blacklist, 50));
|
||||||
|
|
||||||
|
neighbors.clear();
|
||||||
|
neighbors.addAll(allNeighbors);
|
||||||
|
neighbors.removeIf(browseResultCleaner.shouldRemoveResultPredicate());
|
||||||
|
}
|
||||||
|
|
||||||
|
neighbors.sort(Comparator.comparing(BrowseResult::relatedness).reversed());
|
||||||
|
|
||||||
|
return new BrowseResultSet(neighbors);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user