aboutsummaryrefslogtreecommitdiff
path: root/juick-server/src/main
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2018-07-16 15:53:38 +0300
committerGravatar Vitaly Takmazov2018-07-16 15:53:38 +0300
commit6afdad578701d38dd45d7d1c8ef446269f3a1275 (patch)
treec8259c0b047523b0b6035a8a1a2daa3a9016bb46 /juick-server/src/main
parenta8a32a0957ea014b1204b037164cb7d53cccd0c7 (diff)
sphinx search: page by offset
Diffstat (limited to 'juick-server/src/main')
-rw-r--r--juick-server/src/main/java/com/juick/server/api/Messages.java5
-rw-r--r--juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java24
-rw-r--r--juick-server/src/main/java/com/juick/service/SphinxSearchService.java12
3 files changed, 13 insertions, 28 deletions
diff --git a/juick-server/src/main/java/com/juick/server/api/Messages.java b/juick-server/src/main/java/com/juick/server/api/Messages.java
index b433bea5..eb562103 100644
--- a/juick-server/src/main/java/com/juick/server/api/Messages.java
+++ b/juick-server/src/main/java/com/juick/server/api/Messages.java
@@ -89,6 +89,7 @@ public class Messages {
@RequestParam(required = false) String withrecommended,
@RequestParam(required = false) String popular,
@RequestParam(required = false) String search,
+ @RequestParam(required = false, defaultValue = "0") Integer page,
@RequestParam(required = false) String media,
@RequestParam(required = false) String tag) {
@@ -112,7 +113,7 @@ public class Messages {
} else if (daysback > 0) {
mids = messagesService.getUserBlogAtDay(user.getUid(), 0, daysback);
} else if (!StringUtils.isEmpty(search)) {
- mids = messagesService.getUserSearch(user.getUid(), Utils.encodeSphinx(search), 0, before);
+ mids = messagesService.getUserSearch(user.getUid(), Utils.encodeSphinx(search), 0, page);
} else {
mids = messagesService.getUserBlog(user.getUid(), 0, before);
}
@@ -132,7 +133,7 @@ public class Messages {
return NOT_FOUND;
}
} else if (!StringUtils.isEmpty(search)) {
- mids = messagesService.getSearch(Utils.encodeSphinx(search), before);
+ mids = messagesService.getSearch(Utils.encodeSphinx(search), page);
} else {
mids = messagesService.getAll(visitor.getUid(), before);
}
diff --git a/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java b/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java
index d64ecc04..a78c9203 100644
--- a/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java
+++ b/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java
@@ -628,15 +628,8 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ
@Transactional(readOnly = true)
@Override
- public List<Integer> getSearch(final String search, final int before) {
- List<Integer> mids = searchService.searchInAllMessages(search, before);
-
- if (!mids.isEmpty())
- return getNamedParameterJdbcTemplate().queryForList(
- "SELECT message_id FROM messages WHERE message_id IN (:ids) AND privacy > 0 ORDER BY message_id DESC LIMIT 20",
- new MapSqlParameterSource("ids", mids),
- Integer.class);
- return mids;
+ public List<Integer> getSearch(final String search, final int page) {
+ return searchService.searchInAllMessages(search, page);
}
@Transactional(readOnly = true)
@@ -755,17 +748,8 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ
@Transactional(readOnly = true)
@Override
- public List<Integer> getUserSearch(final int UID, final String search, final int privacy, final int before) {
- List<Integer> mids = searchService.searchByStringAndUser(search, UID, before);
-
- if (!mids.isEmpty()) {
- return getNamedParameterJdbcTemplate().queryForList(
- "SELECT message_id FROM messages WHERE message_id IN (:ids) AND privacy >= :privacy ORDER BY message_id DESC",
- new MapSqlParameterSource("ids", mids)
- .addValue("privacy", privacy),
- Integer.class);
- }
- return mids;
+ public List<Integer> getUserSearch(final int UID, final String search, final int privacy, final int page) {
+ return searchService.searchByStringAndUser(search, UID, page);
}
@Transactional(readOnly = true)
diff --git a/juick-server/src/main/java/com/juick/service/SphinxSearchService.java b/juick-server/src/main/java/com/juick/service/SphinxSearchService.java
index f2f31295..da27196f 100644
--- a/juick-server/src/main/java/com/juick/service/SphinxSearchService.java
+++ b/juick-server/src/main/java/com/juick/service/SphinxSearchService.java
@@ -39,7 +39,7 @@ public class SphinxSearchService extends BaseJdbcService implements SearchServic
private int maxResult = DEFAULT_MAX_RESULT;
@Override
- public List<Integer> searchInAllMessages(final String searchString, final int messageIdBefore) {
+ public List<Integer> searchInAllMessages(final String searchString, final int page) {
if (StringUtils.isBlank(searchString))
return Collections.emptyList();
@@ -47,8 +47,8 @@ public class SphinxSearchService extends BaseJdbcService implements SearchServic
sphinxQuery.put("limit", String.valueOf(maxResult));
sphinxQuery.put("mode", "any");
sphinxQuery.put("sort", "extended:@weight desc, @id desc");
- if (messageIdBefore > 0) {
- sphinxQuery.put("maxid", String.valueOf(messageIdBefore - 1));
+ if (page > 0) {
+ sphinxQuery.put("offset", String.valueOf(page * maxResult));
}
return getJdbcTemplate().queryForList(
@@ -58,7 +58,7 @@ public class SphinxSearchService extends BaseJdbcService implements SearchServic
}
@Override
- public List<Integer> searchByStringAndUser(final String searchString, final int userId, int messageIdBefore) {
+ public List<Integer> searchByStringAndUser(final String searchString, final int userId, int page) {
if (StringUtils.isBlank(searchString))
return Collections.emptyList();
@@ -66,8 +66,8 @@ public class SphinxSearchService extends BaseJdbcService implements SearchServic
sphinxQuery.put("limit", String.valueOf(maxResult));
sphinxQuery.put("mode", "any");
sphinxQuery.put("sort", "extended:@weight desc, @id desc");
- if (messageIdBefore > 0) {
- sphinxQuery.put("maxid", String.valueOf(messageIdBefore - 1));
+ if (page > 0) {
+ sphinxQuery.put("offset", String.valueOf(page * maxResult));
}
return getJdbcTemplate().queryForList(
String.format("SELECT id FROM search WHERE query = '%s;%s;filter=user_id,%d'", searchString,