Настройка функции поиска в модуле CRUD Play - PullRequest
3 голосов
/ 11 июня 2011

Редактировать: поиск, кажется, работает очень простым способом, поиск любого текста, введенного во все поля-члены String соответствующей модели, без специальных операторов поиска.

Если есть какой-либо способ настройкиКак работает поиск, я хотел бы знать.Прямо сейчас это выглядит так, как будто мне просто нужно игнорировать встроенный поисковый материал и свернуть свой собственный.


После добавления поля notes он начал ничего не возвращать вместо всего.Единственное, что до сих пор работало, - это ввести «test» в поле поиска, которое возвращает запись с «test» в поле заметок.Поиск «notes: test» или «notes = test» не работает, а также не предпринимает попыток поиска в полях agent или status.Я пробовал что-то вроде «1400», и это значение, которое я проверял, присутствует в поле агента через phpMyAdmin, и что-то вроде «0» или «VALID» для поля состояния, что есть во всех записях.

поля модели:

public class AgentShift extends Model {
    public enum Status { VALID, RESCHEDULED, EXTENDED, DELETED } // REDUCED?

    @Required @Min(1000) @Max(99999)
    public int agent;
    public Status status = Status.VALID;

    @Required
    @Columns(columns={@Column(name="start_time"),@Column(name="end_time")})
    @Type(type="org.joda.time.contrib.hibernate.PersistentInterval")
    public Interval scheduled;

    @Type(type="org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime")
    public LocalTime agent_in;
    @Type(type="org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime")
    public LocalTime agent_out;

    public String notes;
}

измененная страница списка рассылки:

#{extends 'main.html' /}
#{set title: 'Agent Shifts' /} 

<div id="crudList" class="${type.name}">

    <h2 id="crudListTitle">&{'crud.list.title', type.name}</h2>

    <div id="crudListSearch">
        #{crud.search /}
    </div>

    <div id="crudListTable">
        #{crud.table fields:['id','agent','scheduled','status','notes'] }
            #{crud.custom 'scheduled'}
                #{if object.scheduled.getStart().toDateMidnight().equals(object.scheduled.getEnd().toDateMidnight())}
                    ${org.joda.time.format.DateTimeFormat.forStyle("SS").printTo(out, object.scheduled.getStart())} to 
                    ${org.joda.time.format.DateTimeFormat.forStyle("-S").printTo(out, object.scheduled.getEnd())}
                #{/if}
                #{else}
                    ${org.joda.time.format.DateTimeFormat.forStyle("SS").printTo(out, object.scheduled.getStart())} to 
                    ${org.joda.time.format.DateTimeFormat.forStyle("SS").printTo(out, object.scheduled.getEnd())}
                #{/else}
            #{/crud.custom}
            *{
            #{crud.custom 'entered_by'}
                #{if object.entered_by}
                    ${object.entered_by}
                #{/if}
                #{else} ?
                #{/else}
            #{/crud.custom}
            #{crud.custom 'created'}
                ${org.joda.time.format.DateTimeFormat.forStyle("SS").printTo(out, object.created)}
            #{/crud.custom}
                }*
        #{/crud.table}
    </div>

    <div id="crudListPagination">
        #{crud.pagination /}
    </div>

    <p id="crudListAdd">
        <a href="@{blank()}">&{'crud.add', type.modelName}</a>
    </p>

</div>

Ответы [ 2 ]

2 голосов
/ 20 июня 2011

Вы можете использовать модуль упругого поиска.

1) Определить контроллер:

@ElasticSearchController.For(ElasticSearchSampleModel.class)
public class ElasticSearchExample extends ElasticSearchController {

}

2) Определить стандартную модель JPA с аннотацией @ElasticSearchable:

@Entity
@ElasticSearchable
public class ElasticSearchSampleModel extends Model {

    /** The Constant serialVersionUID. */
    private static final long serialVersionUID = 1L;

    /** The field1. */
    public String field1;

    /** The field2. */
    public String field2;

    /**
     * To String
     * 
     * @see play.db.jpa.JPABase#toString()
     */
    @Override
    public String toString() {
        return "ElasticSearchSampleModel [field1=" + this.field1 + ", field2=" + this.field2 + "]";
    }

}

Вы можете найти больше информации на http://geeks.aretotally.in/play-framework-module-elastic-search-distributed-searching-with-json-http-rest-or-java.

2 голосов
/ 15 июня 2011

Здесь вы можете увидеть, как настроить страницы CRUD, в том числе, как показать определенные поля объекта на экране.

Строки поиска должны быть в формате:

 <field name>:<value>

Например:

name:Liam

Этот поиск будет фильтровать все объекты, имя которых содержит Лиам. Имя поля должно быть полем, отображаемым на странице списка. Я не уверен, работает ли он с @Lob, но обычно это поле не нужно отображать на странице списка, поэтому это не должно вызывать проблем.

Я должен сказать, что в Play 1.1 у меня были некоторые проблемы с некоторыми столбцами, в которых запуск поиска не работал (возникла ошибка), и я не мог ее решить. Похоже, что это не происходит в 1.2.1 (я понятия не имею, является ли это исправлением или просто изменением, которое я сделал, не заметив)

РЕДАКТИРОВАТЬ:

В обновленном вопросе страница списка выглядит правильно.

Одна смелая идея: вы проверили, что в базе данных есть правильные столбцы? Я помню, что у меня были некоторые проблемы с тем, что Hibernate не играл честно, когда менял некоторые модели и несколько колонок, которые не обновлялись должным образом, вызывая странное поведение. Возможно, стоит полностью удалить стол и позволить Play восстановить его.

Если это не помогло, скорее всего, это ошибка Play в контроллере CRUD, вам нужно найти источник.

Моей первой проблемой будет отсутствие аннотации rel на Interval, а также использование LocalTime и enum Status. Это не должно иметь значения, но ... боюсь, я могу только предложить вам выполнить инкрементальный тест для локализации проблемы:

  • удалите все, кроме агента и заметок, и попробуйте поиск.
  • Если это не удастся, сообщите об ошибке на Маяке Плей, как это не должно
  • Если это работает, продолжайте добавлять поля по одному и повторно проверять результаты поиска. Это будет быстро с Play, и вы можете обнаружить аннотацию / поле, вызывающее проблему, и сообщить о Lighthouse
...