Project

General

Profile

how to use multi-fields search for issues in REST api?

Added by Alex Last over 8 years ago

hi guys!

someone submitted a feature request for Redmine Java library to support free-form search with multiple params like "f[]".
I added support for this, but I do not see any documentation on how to use that free-form search in Redmine REST API.

I have this integration test that fails because it returns more than 1 issue, which indicates that search terms I used result in "or" operation rather than expected "and". this test is in Java, but you can see the idea in it - the search part is not specific to any language, it is specific to Redmine only.

can someone please post a link to a page describing how to use free-form search for redmine objects (like "f[]", "op[..]=xyz", "and", "or", etc)?

  /**
     * regression test for https://github.com/taskadapter/redmine-java-api/issues/12 and
     * https://github.com/taskadapter/redmine-java-api/issues/215
     */

    public void issuesCanBeFoundByMultiQuerySearch() throws RedmineException {

        final Issue issue1 = IssueFactory.create(projectId, "summary 1 here");
        issue1.setDescription("abc description");
        issueManager.createIssue(issue1);

        final Issue issue2 = IssueFactory.create(projectId, "summary 2 here");
        issue2.setDescription("def totally different description");
        issueManager.createIssue(issue2);

        final Issue issue3 = IssueFactory.create(projectId, "another");
        issue3.setDescription("abc");
        issueManager.createIssue(issue3);

        Params params = new Params()
                .add("set_filter", "1")
                .add("f[]", "summary")
                .add("op[summary]", "~")
                .add("v[summary]", "another")
                .add("f[]", "description")
                .add("op[description]", "~")
                .add("v[description][]", "abc");

        final ResultsWrapper<Issue> list = issueManager.getIssues(params);
        // only 1 issue must be found
        assertThat(list.getResults()).hasSize(1);
    }

Replies (2)

RE: how to use multi-fields search for issues in REST api? - Added by Alex Last over 8 years ago

I found this combination of params to work:

   
    public void issuesCanBeFoundByMultiQuerySearch() throws RedmineException {
        final Issue issue1 = IssueFactory.create(projectId, "summary 1 here");
        issueManager.createIssue(issue1);
        final Issue issue2 = IssueFactory.create(projectId, "summary 2 here");
        issueManager.createIssue(issue2);
        final Issue issue3 = IssueFactory.create(projectId, "another");
        issueManager.createIssue(issue3);

        final User currentUser = userManager.getCurrentUser();
        Params params = new Params()
                .add("set_filter", "1")
                .add("f[]", "subject")
                .add("op[subject]", "~")
                .add("v[subject][]", "another")
                .add("f[]", "author_id")
                .add("op[author_id]", "~")
                .add("v[author_id][]", currentUser.getId()+"");
        final ResultsWrapper<Issue> list = issueManager.getIssues(params);
        // only 1 issue must be found
        assertThat(list.getResults()).hasSize(1);
    }

RE: how to use multi-fields search for issues in REST api? - Added by Philipp Gächter about 2 years ago

cf_91 = 2206094 Monsum Customer ID
cf_85 = 966832 Monsum Subscription ID

This can also be used to query the REST API via GET and using custom fields:

{{BASE_URL}}/issues.json?limit=25&offset=0&f[]=cf_83&op[cf_83]==&v[cf_83][]=SOMEVALUE&include[]=relations
{{BASE_URL}}/issues.json
    ? limit         = 25
    & offset        = 0

    & f  []         = cf_83            ← field
    & op [cf_83]    = =                ← operator `=`
    & v  [cf_83] [] = SOMEVALUE        ← value(s)

    & include[]     = relations

You are adding multiple fields to the parameters.

  • Question 0: Is there any documentation about this?
  • Question 1: Do you know how a multiple fields filter can be done with GET?
    → Researched myself: Use multiple f[] GET parameters, i.e. ?f[]=cf_83&f[]=cf_91 (additionally add op[x] and v[x] for second field)(source)
    → Full example: /issues.json?f[]=cf_91&f[]=cf_83&op[cf_83]==&v[cf_83][]=VALUE_X&op[cf_91]==&v[cf_91][]=VALUE_Y
  • Question 2: Is it possible to connect the filters with OR instead of AND?

Desired outcome:
→ Tickets with custom field 83 value X or custom field 91 value Y

best regards, phil

    (1-2/2)